【发布时间】:2010-11-23 13:41:40
【问题描述】:
谁能给我一个来自epolled 的recv 的示例,边缘触发模式下的非阻塞套接字?我问是因为我有一些麻烦。
【问题讨论】:
标签: c sockets nonblocking epoll
谁能给我一个来自epolled 的recv 的示例,边缘触发模式下的非阻塞套接字?我问是因为我有一些麻烦。
【问题讨论】:
标签: c sockets nonblocking epoll
EPOLLET 设置的手册页有:
将 epoll 用作边缘触发 ( EPOLLET ) 接口的建议方法如下,以及避免遵循的可能陷阱。
i
with non-blocking file descriptors
ii
by going to wait for an event only after read(2) or write(2)
return EAGAIN
编辑: 您也可以调用 recv() 或 read() 获取 x 个字节,直到收到少于 x 个字节。
如果您不这样做,您可能会造成数据保留在套接字缓冲区中并阻止套接字上的 ET 活动的饥饿情况。
你有什么问题?
【讨论】:
recv() 返回> 0 时,您实际上应该循环。如果返回-1,则查看errno - 如果是EAGAIN,则返回轮询,否则处理错误(关闭套接字等)