c++ - 连续性多个 WSASend() io 完成端口

标签 c++ winsock io-completion-ports

在来自服务器的 IO 完成端口中使用 TCP,如果我在同一个套接字中连续两次 WSASend,第一个发送“ABC”,第二个发送“DEF”,然后当我调用 GetQueuedCompletionStatus 它告诉我第一个 WSASend 只发送了“AB” 然后我再次调用 GetQueuedCompletionStatus 它告诉我第二个 WSASend 发送“DEF”,客户端是否要接收“ABDEF”?还是第二个 WSASend 会因为第一个 WSASend 消息不完整而失败?

最佳答案

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

如果您在 ABC 和 DEF 上(按此顺序)发出 WSASend() 并且您得到 ABC 的 2 个字节和 DEF 的 3 个字节的完成,接收方可能没有收到任何东西,A,AB,ABC,ABCD,ABCDE , 或 ABCDEF。不过,很可能他们除了 AB 之外没有收到任何东西。

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

关于c++ - 连续性多个 WSASend() io 完成端口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38242135/

相关文章:

c++ - 间歇性地没有数据通过 boost::asio/io 完成端口传递

c - WriteFile 与 IO 完成端口问题

c++ - 如何获取哈希值,c++ hash_map

c++ - 我怎样才能清楚地指定我要传递哪些参数以及哪些参数保持默认?

c++ - boost 目录以包含访问者设计模式

c++ - 在 C++ 和 QT 中播放 wav 音频文件

c - 将登录信息与套接字相关联?

networking - 为什么微软以不同的方式实现套接字?

c++ - 无法连接到端口,但 netstat 显示正在监听的端口

c++ - IOCP WSARecv 总是返回错误 10022