GVKun编程网logo

Unix IPC套接字:closures一端而不读取它(unix套接字和tcp套接字的区别)

26

对于UnixIPC套接字:closures一端而不读取它感兴趣的读者,本文将会是一篇不错的选择,我们将详细介绍unix套接字和tcp套接字的区别,并为您提供关于centos–无法连接到PostgreS

对于Unix IPC套接字:closures一端而不读取它感兴趣的读者,本文将会是一篇不错的选择,我们将详细介绍unix套接字和tcp套接字的区别,并为您提供关于centos – 无法连接到PostgreSQL unix域套接字、closures一个窗户蝙蝠,做一些行动、closures接口Down上的所有TCP套接字、closures窗口(通过它的窗口句柄),而不closures拥有它的进程的有用信息。

本文目录一览:

Unix IPC套接字:closures一端而不读取它(unix套接字和tcp套接字的区别)

Unix IPC套接字:closures一端而不读取它(unix套接字和tcp套接字的区别)

我有一个父进程和一个分叉的subprocess,并且它们共享一个使用socketpair(AF_UNIX,SOCK_STREAM,sockets)创build的Unix域IPC套接字。 这两个进程closuressocketpair的一端,并将另一端保存到sockvariables中。 之后,他们这样做:

int sock; // Unix-domain socket void child_main() { printf("I am childn"); sleep(1); close(sock); } void parent_main() { printf("I am parentn"); write(sock,"hello",5); char buf[100]; int ret = read(sock,buf,100); // this read will return ECONNRESET if (ret == -1) { perror("read"); exit(-1); } }

父进程将一些数据写入套接字,并且孩子不读取它。 而是孩子closuressockets。 现在我担心的是,在父进程read失败与ECONNRESET(连接重置由同行),而我期望它会返回“0”表示stream结束。 因为套接字的另一端通过调用close 优雅地closures。

现在,我明白,行为(closures套接字而不读取挂起的数据会生成ECONNRESET),但是这是在哪里logging的? man read没有说ECONNRESET,但它提到:

可能会发生其他错误,具体取决于连接到fd的对象

错误在绑定服务器套接字::地址已在使用中。 UDP C编程

调用套接字绑定导致Windows蓝屏

为什么不能同时绑定到0.0.0.0:80和192.168.1.1:80?

Linux的TCP / IP非阻塞发送套接字stream.. TCP recv缓冲区发生了什么?

Linux C:获取默认接口的IP地址

unix域套接字的手册页只说:

ECONNRESET:远程套接字意外closures。

但是由于Unix域套接字是一个本地IPC的东西,我想这可能是更具体的情况下,这个错误可能发生。

我的“更深层次的想法”是这样的:如果规范说如close ,只有当没有数据要从套接字读取时才会产生stream结束标记,它如何​​知道另一个进程是不是只是写一些? 这不会造成竞争状态吗? 内核如何知道连接是否将被正常closures?

为什么需要IP_MULTICAST_IF和IPV6_MULTICAST_IF?

Linux – TCP连接()与ETIMEDOUT失败

MAMP无法查找本地主机。 网站不可用

setsockopt()中的错误:数字参数超出域

Socket编程C / C ++ – recv函数在服务器中挂起

使用有状态套接字(unix域或tcp),区分“无数据”和关闭另一端的套接字的最好方法是首先使用select()传递一个readfds(请参见man 2 select)。 如果,并且只有当select指示一个读事件时,然后尝试在套接字上读()。 如果读取的字节数为0,则表示套接字已关闭(由对等方重置连接)。

总结

以上是小编为你收集整理的Unix IPC套接字:closures一端而不读取它全部内容。

如果觉得小编网站内容还不错,欢迎将小编网站推荐给好友。

centos – 无法连接到PostgreSQL unix域套接字

centos – 无法连接到PostgreSQL unix域套接字

我正在尝试从 PHP Web应用程序连接到Postgresql Unix域套接字.相关系统组件:

> CentOS 7 x64(SELinux强制执行)
> postgresql93 9.3.5-2PGDG.rhel7
> Nginx 1.6.2-1.el7.ngx
> PHP-common 5.4.16-23.el7_0.3
> PHP-fpm 5.4.16-23.el7_0.3
> PHP-pdo 5.4.16-23.el7_0.3
> PHP-pgsql 5.4.16-23.el7_0.3

Postgresql正在监听标准端口5432,我在127.0.0.1:5432通过TCP / IP使用它没有问题,但是当我尝试连接到它的Unix域套接字时,我有以下错误:

Cannot connect to database: sqlSTATE[08006] [7] Could not connect to server:
No such file or directory
    Is the server running locally and accepting
    connections on Unix domain socket "/tmp/.s.PGsql.5432"?

文件/tmp/.s.PGsql.5432存在,我可以使用psql连接:

$psql -Uusername db_name
psql (9.3.5)
Type "help" for help.

db_name=>

所以Postgresql方面应该没有问题.还是有吗?

来自/var/lib/pgsql/9.3/data/pg_hba.conf的相关行:

local    all    username        trust

在/var/lib/pgsql/9.3/data/postgresql.conf中更改Unix域套接字文件的位置没有帮助:

unix_socket_directories = '/var/run/pgsql'

/var/log/audit/audit.log中没有任何内容,但我试图禁用SELinux,只是为了确定:

# setenforce 0

这没有用,所以它不是SELinux.

来自PHP-fpm的相关行:

[pid   882] socket(PF_LOCAL,SOCK_STREAM,0) = 5
[pid   882] fcntl(5,F_SETFL,O_RDONLY|O_NONBLOCK) = 0
[pid   882] fcntl(5,F_SETFD,FD_CLOEXEC) = 0
[pid   882] connect(5,{sa_family=AF_LOCAL,sun_path="/tmp/.s.PGsql.5432"},110) = -1 ENOENT (No such file or directory)
[pid   882] close(5)                    = 0

文件名是正确的,同样,文件/tmp/.s.PGsql.5432存在:

$ls -l /tmp/.s.PGsql.5432
srwxrwxrwx. 1 postgres postgres 0 Nov  1 09:47 /tmp/.s.PGsql.5432

看起来像PHP-fpm进程不是chroot’ed:

# ls -l /proc/882/root
lrwxrwxrwx. 1 apache apache 0 Oct 31 19:54 /proc/882/root -> /

在这一点上,我没有更多的想法可以解决问题,我将不胜感激任何帮助.

我已经解决了这个问题.它的最初原因是在PHP-fpm /usr/lib/systemd/system/PHP-fpm.service的systemd服务文件中:
[Service]
PrivateTmp=true

这意味着PHP-fpm无法看到/tmp/.s.PGsql.5432或/ tmp中的任何其他内容.
要解决此问题,我已使用以下步骤更改了Postgresql Unix域套接字文件的位置:

>创建一个新目录/ var / pgsql(注意更改SELinux文件上下文):

# mkdir /var/pgsql
# chown posgres:postgres /var/pgsql
# chmod 0755 /var/pgsql
# semanage fcontext -a -t httpd_var_run_t "/var/pgsql(/.*)?"
# restorecon -R /var/pgsql

>取消注释并修改/var/lib/pgsql/9.3/data/postgresql.conf中的unix_socket_directories参数(/ tmp仍然需要不破坏psql和其他程序):

unix_socket_directories = '/tmp,/var/pgsql'

这是另一个棘手的部分…在我写的原始帖子中,我试图改变Unix域套接字文件的位置,我真的做到了.我错过的是更改的错误消息.我认为错误是一样的,但事实并非如此:

Error (256): Cannot connect to database: sqlSTATE[08006] [7] Could not connect to
server: Permission denied
    Is the server running locally and accepting
    connections on Unix domain socket "/var/pgsql/.s.PGsql.5432"?

许可被拒绝 – 这是人们可以战斗的事情.

一切都有效

# setenforce 0

问题是:

# audit2allow -a

#============= httpd_t ==============
allow httpd_t initrc_t:unix_stream_socket connectto;

它可以修复:

# audit2allow -a -M httpd_postgresql_unix_socket_connect
# semodule -i httpd_postgresql_unix_socket_connect.pp

httpd_postgresql_unix_socket_connect.te的内容:

module httpd_postgresql_unix_socket_connect 1.0;

require {
        type httpd_t;
        type initrc_t;
        class unix_stream_socket connectto;
}

#============= httpd_t ==============
allow httpd_t initrc_t:unix_stream_socket connectto;

重新打开SELinux:

# setenforce 1

一切正常!

附:我很高兴知道是否有办法通过更改某些文件上下文或布尔值来避免自定义SELinux模块.可能是这种情况,因为SELinux允许Nginx使用PHP-fpm Unix域套接字(/var/run/PHP5-fpm.sock),但由于某种原因阻止使用Postgresql Unix域套接字(/var/pgsql/.s) .PGsql.5432).

closures一个窗户蝙蝠,做一些行动

closures一个窗户蝙蝠,做一些行动

这里我的问题是我想直接closures一个windows bat dos窗口,当closures动作被调用时,应该调用一些动作或另一个蝙蝠,我该如何实现呢?

我正在做的是这样的:我启动一个蝙蝠,并且蝙蝠启动两个进程,当dos蝙蝠closures时,两个进程也应该closures。 用户经常直接closuresdos窗口,不要使用我提供的stop.bat,所以我想是否有可能赶上用户的近距离行动,做点什么!

谢谢 !!!!

PowerShell批处理pipe道

我可以使用VBScript来返回Windows预定作业的最后结果吗?

使用ShellExecute c ++打开长URL

快速的方法来复制(移动)batch file中的文件

使用Powershell和SendTo将registry备份添加到新密钥

.bat如何检查curl或wget是否存在

如何pipe理批处理脚本输出到PowerShell脚本?

如何将以“!”结尾的parameter passing给另一个bat文件?

系统环境variables在cmd中

如何使用Windows批量增加文件夹名称?

那么,我已经解决了这个问题。 其主要思想是从[ 关闭Java应用程序中的一个蝙蝠脚本的Java关闭挂钩 ],但答案有一个错误,那就是如果我强行关闭Bat或Cmd,可能不会调用该操作,原因是JVM在调用java代码操作之前关闭。 所以我把这个动作放在本地方法中。

我最近做了这样的事情。 基本上,我设法让它工作的方式是当我们启动主批处理文件(我们称之为bat1)时,我有另一个批处理文件(我们称之为bat2)启动。

:start tasklist /v | Find "BAT1''S WINDOW NAME GOES HERE" if "%ERRORLEVEL%"=="1" COMMAND TO EXECUTE WHEN THE WINDOW IS CLOSED if "%ERRORLEVEL%"=="1" exit timeout /t 1 /NOBREAK >nul goto :start

这是我用于bat2的脚本。 这可能不是那么好,但我对这个东西很新,所以这是我能想到的最好的。

希望这可以帮助你!

请注意AstralBacon以前的输入。 你可以这样简化它:

:start tasklist /v | Find "BAT1''S WINDOW NAME GOES HERE" if "%ERRORLEVEL%"=="1" ( COMMAND TO EXECUTE WHEN THE WINDOW IS CLOSED exit ) timeout /t 1 /NOBREAK >nul goto :start

总结

以上是小编为你收集整理的closures一个窗户蝙蝠,做一些行动全部内容。

如果觉得小编网站内容还不错,欢迎将小编网站推荐给好友。

closures接口Down上的所有TCP套接字

closures接口Down上的所有TCP套接字

一旦以太网接口掉线,我需要closures所有正在运行的Linux TCP套接字(即电缆断开,接口断开等等)。

攻入/ proc似乎没有办法。 没有发现任何有价值的ioctl的。 在应用程序级别手动执行它并不是我想要的,我真的正在寻找一种残酷的全局方式。

以前是否曾经经历过这个,愿意分享他的基础?

C ++:如何测量非阻塞套接字的实际上传速率

Windows TCP套接字recv延迟

IOCP:内核如何决定同步或asynchronous完成WSASend?

Python的跟踪路由错误的Windows 7

在Linux中将filter连接到原始套接字 – C

监听系统调用中的积压值

EAGAIN是否会返回缓冲区已满以外的任何内容?

如何在Linux中“互连”两个套接字?

可以在一个连接的套接字读取()函数返回零字节?

uwsgi套接字未创build

避免应用程序级别编码的残酷方式是黑客攻击你的内核,为所有的连接激活TCP keepalive,超时时间很短。

这是很少需要的,往往是行不通的。 TCP是一种数据传输协议,除非有数据丢失,不应该做任何事情。 想一想为什么你会需要这个。

否则,您可以尝试定期轮询接口并检查UP标志。 如果接口失去UP标志,那么OS已经在电缆拔出和接口上作出了反应。 man 7 netdevice ,详见SIocgIFFLAGS。

网络驱动程序即使在连接电缆时也会生成一个事件,但是我不确定您是否可以从用户访问该事件。 您可能需要检查udev因为其文档明确提到了网络接口 。

总结

以上是小编为你收集整理的closures接口Down上的所有TCP套接字全部内容。

如果觉得小编网站内容还不错,欢迎将小编网站推荐给好友。

closures窗口(通过它的窗口句柄),而不closures拥有它的进程

closures窗口(通过它的窗口句柄),而不closures拥有它的进程

我试图closures个人窗口从我没有访问的代码的进程。 该程序产生了一个button按下时看起来像IE浏览器窗口,但他们不创build一个iexplorer.exe进程(他们都显然住在应用程序进程内)。 我已经设法通过一些API调用来获得每个“假”的IE窗口的进程句柄和窗口句柄,但我不知道如何closures一个进程中的给定窗口。

我试过了

SendMessage(WindowHandles[i],0x0010,0);

这是WM_CLOSE消息,但是它closures了进程中的所有窗口并结束了进程。 有没有办法通过编程来做类似于当我按下窗口右上angular的X时发生的事情? 该窗口没有执行任何计算或影响任何其他内存空间,所以我可以结束它,但我想,但一切我已经尝试了一切,我知道该怎么办(DestroyWindow;返回错误5权限被拒绝,WM_CLOSE;这工作,但closures进程,WM_QUIT;这给错误2文件没有find,什么都不做)。

有任何想法吗?

如何在32位体系结构中将64位无符号long long分配给32位结构

ImportError:DLL加载失败:%1不是有效的Win32应用程序 – paramiko

在运行时更改进程名称

进程间通信通过文件

当操作系统杀死你的进程时返回代码

获取进程的历史命令

cmd.exe意外挂起取决于我使用的文件位于何处

KEY_WOW64_64KEY对32位Windows有什么影响吗?

Linux:终止一系列进程的最可靠的方法

如何识别用户界面过程中的过程?

您可以发送一个SW_HIDE技术上的工作,虽然它不会关闭它们,你可以在http://msdn.microsoft.com/en-us/library/ms633548(v=vs.85).aspx找到更多的信息。

关于Unix IPC套接字:closures一端而不读取它unix套接字和tcp套接字的区别的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于centos – 无法连接到PostgreSQL unix域套接字、closures一个窗户蝙蝠,做一些行动、closures接口Down上的所有TCP套接字、closures窗口(通过它的窗口句柄),而不closures拥有它的进程的相关信息,请在本站寻找。

本文标签: