Articles of socketpair

写入SOCK_SEQPACKETprimefaces?

我的意思是primefaces是成功或失败,什么都不做。 我知道socketpair(AF_LOCAL, SOCK_STREAM)不是primefaces的,如果多个进程/线程调用write(fd, buf, len) , write()的返回值可能> 0 && < len并导致数据乱序。 如果多个进程/线程write(buf, len)由socketpair(AF_LOCAL, SOCK_SEQPACKET)创build的socketpair(AF_LOCAL, SOCK_SEQPACKET) write(buf, len)是否是primefaces的? 我检查了Linux手册,发现了一些关于pipe()说法,如果len小于PIPE_BUF , write/writev是primefaces的。 我没有发现任何关于socketpair 。 我写了一个testing代码,发现似乎SOCK_SEQPACKET是primefaces的,我给fd写了随机长度的缓冲区,返回值总是-1或len 。

Perl在使用Windows,IPC :: Open3和IO :: Socket-> socketpair()时select在sysread上返回undef

我发现这个例子 (由@ikegami发布)是一种在使用套接字的Windows上使用IPC :: Open3的方法。 问题是,当我运行它时,我得到一个错误一个现有的连接被 sysread 远程主机强制closures 。 该命令运行, select工作正常,但sysread获取undef而不是预期的0文件结束。 所有命令的行为都不一样。 如果我更改命令echo Hello World! 它不会导致错误。 有什么想法发生在这里? 以下是示例中的代码: use strict; use warnings; use IO::Select qw( ); use IPC::Open3 qw( open3 ); use Socket qw( AF_UNIX SOCK_STREAM PF_UNSPEC ); print( "REMOVE ME: getting started\n" ); sub _pipe { socketpair($_[0], $_[1], AF_UNIX, SOCK_STREAM, PF_UNSPEC) or return undef; shutdown($_[0], […]

从pipe道或sockets上读取一端closures到EOF是否安全?

考虑以下示例代码: #include <sys/socket.h> int main() { int sv[ 2 ] = { 0 }; socketpair( AF_UNIX, SOCK_STREAM | SOCK_CLOEXEC | SOCK_NONBLOCK, 0, sv ); for( unsigned ii = 0; ii < 5; ++ii ) { int* msg = new int( 123 ); if( -1 == send( sv[ 0 ], &msg, sizeof(int*), MSG_NOSIGNAL ) ) { […]