c++ - 当我调用WSASend()时,所有数据都会被发送吗?

标签 c++ sockets winapi network-programming iocp

使用 IOCP 时,如果我使用 2 KB 的数据调用 WSASend()。当我收到完成通知时,这个完成通知是否表明整个 2 KB 已发送,或者可能有一些字节未发送?

最佳答案

在正常情况下,是的,只要套接字使用重叠 I/O,您的完成将收到整个 2 KB 已发送的通知。

唯一可能返回小于发送数据大小的情况是连接在发送过程中终止;在这种情况下,它返回发送的部分字节数。

如果不使用重叠 I/O,并且传输缓冲区没有足够的空间来接收整个写入,则它可能会返回部分写入。

根据我的经验,这种情况很少被处理,因为被终止的连接通常会调用一些其他错误处理,并且您很少可以对发送的字节数做任何有用的事情。

关于c++ - 当我调用WSASend()时,所有数据都会被发送吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28675811/

相关文章:

Java 来自套接字 NIO ByteBuffer 的部分消息处理

C++:类 - 重载构造函数 - 单变量?

c++ - 从 3D 转换为 2D 坐标问题

linux - 通过recv C/C++ 通过套接字传递结构

sockets - 无法导入socket模块

c++ - DllMain Attach 和 Detach 过程中的使用限制

c++ - 使用动态内存分配

c++ - 我的简单计算器中的一个变量说它没有被初始化。为什么?

c++ - 在 C++ (win32) 中将位图转换为内存中的 PNG

Java内存映射文件?