0

我有一个当前订阅的非阻塞套接字:

 ev.events = EPOLLIN | EPOLLPRI | EPOLLERR | EPOLLHUP | EPOLLRDHUP| EPOLLET;

它接收几个 EPOLLIN,我非阻塞地读取它们直到 EAGAIN,然后我收到 HUP 和 RDHUP,有时还要读取几个字节。

另一面只是:

send(socket,960_bytes_buffer)
close(socket);

我已经在 epollin 和关闭时间的事件循环中直接尝试使用 msg_peek 进行 recv,并添加接收到的数据它并不总是收到 960,有时只有大约 480 个字节。

使套接字非阻塞或在发送和关闭之间的客户端中放置一个 sleep(1) 可以正常工作。

在我看来,与 epoll 相关的非阻塞套接字问题更多。像“nc -l -p port”这样简单的东西接收适当数量的字节。

4

1 回答 1

6

看看终极 SO_LINGER 页面,或者:为什么我的 tcp 不可靠,它很好地解释了正在发生的事情以及如何修复它。

于 2009-10-13T21:18:00.277 回答