在服务器的IO完成端口中使用TCP,如果我在同一套接字中创建两个连续的WSASend,则第一个发送“ ABC”,第二个发送“ DEF”,然后当我调用GetQueuedCompletionStatus时,它告诉我第一个仅发送了“ AB”,然后我再次呼叫WSASend,它告诉我第二个GetQueuedCompletionStatus发送了“ DEF”,客户端是否打算接收“ ABDEF”?还是第二条WSASend会因为第一条WSASend消息不完整而失败? (adsbygoogle = window.adsbygoogle || []).push({}); 最佳答案 接收方将不会收到ABDEF,因为这暗示了流完整性的侵犯。如果在ABC和DEF上发出WSASend()(按该顺序),并且ABC 2字节和DEF 3字节的补全,接收方可能什么也没收到,A,AB,ABC,ABCD,ABCDE或ABCDEF 。不过,他们很有可能没有收到AB以外的任何东西。当WSASend()的完成指示除完全发送之外的任何内容时,应终止套接字。 closesocket()确实是您应该做的最后一件事;在此之前,您应该耗尽所有未完成的发送和接收(CancelIoEx(),shutdown()等)。 (adsbygoogle = window.adsbygoogle || []).push({});
09-06 04:07