epoll异常句柄

时间:2011-06-21 07:01:04

标签: c++ epoll

我正在使用epoll进行网络编程。我想知道服务器没有收到客户端发送的所有数据的情况。例如,如果客户端发送100个字节,并且某种方式服务器仅接收到94字节。我该如何处理这个案子?

提前致谢..

1 个答案:

答案 0 :(得分:3)

epoll信号准备,它不会对数据量提供任何保证。 EPOLLIN仅为您提供保证,即描述符上的下一个读操作不会阻塞,并且至少会读取1个字节 由于通常将描述符设置为非阻塞的各种(部分特定于os)原因,通常的习惯是读取直到返回EAGAIN。如果数据少于预期(例如,如果您的消息带有标题“my size is 100 bytes”),那么您将等待下一个EPOLLIN(或EPOLLHUP)并重复(或中止)。 / p>

对于TCP,收到的数据少于预期,这是绝对正常的情况。重复。

使用UDP,除非你提供一个太小的缓冲区(这将丢弃剩余的!),这不会发生。永远不能。 UDP一次传送整个数据报,或者什么都不传递。没有部分交付。如果发生IP分段,UDP会将所有分段重新组合成一个数据报并传送完整的数据报。如果片段丢失,UDP将不会提供任何内容。