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

时间:2013-03-18 22:17:35

标签: linux sockets

#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的内容?

1 个答案:

答案 0 :(得分:3)

SOCK_DGRAM和SOCK_STREAM之间的区别在于前者是无连接的,这意味着,除了其他之外,没有连接“状态”传递给通信的另一端。因此,没有关于该插座被另一侧封闭的概念。侦听服务器仍然有一个可以接收数据报的有效端点,即使在这种情况下它恰好是匿名的,因此没有其他人可以找到它来发送数据报。

如果您想拥有连接状态信息,则需要使用SOCK_STREAM。

例如,请参阅this thread,其中讨论了一个非常类似的问题。