在服务器的IO完成端口中使用TCP,如果我在同一个套接字中连续两个WSASend
,则第一个发送“ABC”,第二个发送“DEF”,然后当我调用GetQueuedCompletionStatus
时它告诉我第一个WSASend
只发送了“AB”然后我再次呼叫GetQueuedCompletionStatus
并且它告诉我第二个WSASend
发送“DEF”,客户端将收到“ABDEF” “?或者第二个WSASend
会失败,因为第一条WSASend
邮件不完整?
答案 0 :(得分:0)
接收方不会收到ABDEF,因为这意味着违反了流的完整性。
如果你在ABC和DEF上发出WSASend()(按顺序),你得到ABC的2个字节和DEF的3个字节的完成,接收方可能没有收到任何东西,A,AB,ABC,ABCD,ABCDE ,或ABCDEF。但很可能,他们还没有收到AB以外的任何东西。
当您完成WSASend()以指示除完整发送之外的任何内容时,您应该终止套接字。 closesocket()确实是你应该做的最后一件事;在那之前你应该排出所有未完成的发送和接收(CancelIoEx(),shutdown()等)。