当我调用WSASend()时,是否会发送所有数据?

时间:2015-02-23 14:16:12

标签: c++ sockets winapi network-programming iocp

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

1 个答案:

答案 0 :(得分:1)

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

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

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

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