如何知道袜子对的SOCK_DGRAM对等套接字何时关闭?


#include <sys/socket.h>
int main() {
    int s[2];
    socketpair(AF_UNIX, SOCK_STREAM, 0, s);
    close(s[1]);
    char buf;
    read(s[0], &buf, 1);
}

完成,但是使用SOCK_DGRAM时,它挂起。

如何发现何时将不再有消息?为什么当对等fd关闭时,"read"不返回类似ECONNRESET的东西?

SOCK_DGRAM和SOCK_STREAM之间的区别在于前者是无连接的,这意味着,除其他外,没有一个连接"状态"被传递给通信的另一端。因此,不存在套接字被另一方关闭的概念。侦听服务器仍然有一个可以接收数据报的有效端点,即使在这种情况下它碰巧是匿名的,因此没有人可以找到它向它发送东西。

如果你想获得连接状态信息,你需要使用SOCK_STREAM。

最新更新