作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
#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 关闭时“读取”不返回类似 ECONNRESET 的内容?
最佳答案
SOCK_DGRAM 和 SOCK_STREAM 之间的区别在于前者是无连接的,这意味着除其他外,没有连接“状态”传达给通信的另一端。因此,没有那个套接字被另一方关闭的概念。监听服务器仍然有一个可以接收数据报的有效端点,即使在这种情况下它恰好是匿名的,因此没有其他人可以找到它来向它发送数据。
如果你想有连接状态信息,你想使用SOCK_STREAM。
参见,例如,this thread ,其中讨论了一个非常相似的问题。
关于linux - 如何知道 sockatpair 的 SOCK_DGRAM 对等套接字何时关闭?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15488011/
#include int main() { int s[2]; socketpair(AF_UNIX, SOCK_STREAM, 0, s); close(s[1]);
我是一名优秀的程序员,十分优秀!