连续性多个WSASend()io compretion端口

时间:2016-07-07 09:37:07

标签: c++ winsock io-completion-ports

在服务器的IO完成端口中使用TCP,如果我在同一个套接字中连续两个WSASend,则第一个发送“ABC”,第二个发送“DEF”,然后当我调用GetQueuedCompletionStatus时它告诉我第一个WSASend只发送了“AB”然后我再次呼叫GetQueuedCompletionStatus并且它告诉我第二个WSASend发送“DEF”,客户端将收到“ABDEF” “?或者第二个WSASend会失败,因为第一条WSASend邮件不完整?

1 个答案:

答案 0 :(得分:0)

接收方不会收到ABDEF,因为这意味着违反了流的完整性。

如果你在ABC和DEF上发出WSASend()(按顺序),你得到ABC的2个字节和DEF的3个字节的完成,接收方可能没有收到任何东西,A,AB,ABC,ABCD,ABCDE ,或ABCDEF。但很可能,他们还没有收到AB以外的任何东西。

当您完成WSASend()以指示除完整发送之外的任何内容时,您应该终止套接字。 closesocket()确实是你应该做的最后一件事;在那之前你应该排出所有未完成的发送和接收(CancelIoEx(),shutdown()等)。