对于使用创建的绑定并连接(到未绑定的对等方)套接字socket(AF_UNIX, SOCK_SEQPACKET, 0)
,有没有办法检测远程端已挂起,而不使用poll
(POLLHUP
将设置标志),select
(由于某种原因,出现在写入 fd 集中),还是类似的?
与 不同SOCK_STREAM
,0 长度的有效负载是有效的,并且与流的末尾无法区分(据我所知;在调用recvmsg
远程端调用的套接字时,我不断得到 0 长度的块shutdown
或close
)。struct msghdr
此外,在连接结束的信号中没有任何已知的(对我而言)可见的标志。我在 Linux 内核源net/unix/af_unix.c:unix_seqpacket_recvmsg
代码(-ENOTCONN
SOCK_DGRAM
请注意,使用recvmsg
而不是recv
,recvfrom
等很重要,因为我需要检查MSG_TRUNC
.