我应该处理WSASend()可能不发送所有数据的事实吗?

时间:2015-02-27 21:52:13

标签: c++ sockets iocp

我发现WSASend()可能不会发送所有数据,例如,如果我要求它发送800个字节,它可能只发送600个字节。

现在我的问题是:这种情况发生的情况非常罕见,我不应该费心去处理这种事件。或者我必须处理它?例如,我不能向用户显示一条错误消息,即并非所有数据都已发送并中止连接而不是尝试恢复?

注意:我正在使用IOCP。

2 个答案:

答案 0 :(得分:2)

使用重叠I / O和IOCP发送时,您不太可能看到部分发送。您可能更有可能看到一个错误的发送,您希望发送多个系统页面大小并且只发送一个较小的倍数,但即使这样也不太可能(并且我没有强制执行单元测试)我将其视为理论上的那种情况。)

当通过重叠I / O通过TCP连接发送时,当您的对等端接收和处理的速度比您发送的慢时,this更可能出现的情况,即TCP流控制权,您的WSASend()来电需要更长时间才能完成。

您实际上不太可能通过WSASend()电话或后续GetQueuedCompletionStatus()电话看到错误。事情会一直持续到他们没有......

答案 1 :(得分:0)

只要接收器比发送器慢,就会发生这种情况。您必须通过重新安排要写入的剩余数据来处理它。不要将其视为错误。

相关问题