gpt4 book ai didi

c++ - epoll异常句柄

转载 作者:行者123 更新时间:2023-11-30 03:06:35 25 4
gpt4 key购买 nike

我正在使用 epoll 进行网络编程。我想知道服务器没有收到客户端发送的所有数据的情况。例如,如果客户端发送了 100 个字节,而服务器不知何故只收到了 94 个字节。我该如何处理这种情况?

提前致谢..

最佳答案

epoll 表示就绪,它不对数据量提供任何保证。 EPOLLIN 只给你保证下一次对描述符的读操作不会阻塞,至少会读到 1 个字节。
由于人们通常出于各种(部分特定于操作系统的)原因将描述符设置为非阻塞,因此通常的习惯用法是读取直到返回 EAGAIN。如果这比预期的数据少(例如,如果您有一条标题为“我的大小是 100 字节”的消息),那么您将等待下一个 EPOLLIN(或 EPOLLHUP)并重复(或中止)。

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

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

关于c++ - epoll异常句柄,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6421534/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com