我发现WSASend()
可能不会发送所有数据,例如,如果我要求它发送800个字节,它可能只发送600个字节。
现在我的问题是:这种情况发生的情况非常罕见,我不应该费心去处理这种事件。或者我必须处理它?例如,我不能向用户显示一条错误消息,即并非所有数据都已发送并中止连接而不是尝试恢复?
注意:我正在使用IOCP。
答案 0 :(得分:2)
使用重叠I / O和IOCP发送时,您不太可能看到部分发送。您可能更有可能看到一个错误的发送,您希望发送多个系统页面大小并且只发送一个较小的倍数,但即使这样也不太可能(并且我没有强制执行单元测试)我将其视为理论上的那种情况。)
当通过重叠I / O通过TCP连接发送时,当您的对等端接收和处理的速度比您发送的慢时,this更可能出现的情况,即TCP流控制权,您的WSASend()
来电需要更长时间才能完成。
您实际上不太可能通过WSASend()
电话或后续GetQueuedCompletionStatus()
电话看到错误。事情会一直持续到他们没有......
答案 1 :(得分:0)
只要接收器比发送器慢,就会发生这种情况。您必须通过重新安排要写入的剩余数据来处理它。不要将其视为错误。