游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2135|回复: 1

[IOCP]关于WSASend的问题。。

[复制链接]

50

主题

236

帖子

454

积分

中级会员

Rank: 3Rank: 3

积分
454
发表于 2012-1-30 22:22:00 | 显示全部楼层 |阅读模式
当在GetQueuedCompletionStatus()得到异步通知后,其lpNumberOfBytes参数表明该次IO
完成的字节数。我的问题是:投递一个WSASend(),要发送1K字节的数据,那么lpNumberO
fBytes得到的值可不可能小于1K,即只发送了部分数据?

PS:这段话不是我问的,是我抄来的,不过是我想问的东西,另外作者有这么一个回答:

我试过发100M的数据,也一次全部发送,感觉异步重叠WSASend的行为就是相当于追加
发送缓冲区,系统把100M数据的内存直接当做发送缓冲区的一部分,所以完成通知的字节
数就是100M。
编码是要复杂的,多线程并发WSASend就有问题。


所以有点疑惑,到底WSASend会不会保证一次性把所有数据都发送完毕? [em24]

50

主题

236

帖子

454

积分

中级会员

Rank: 3Rank: 3

积分
454
 楼主| 发表于 2012-2-1 10:23:00 | 显示全部楼层

Re:[IOCP]关于WSASend的问题。。

已解决.


答案:
If the socket is non-blocking and stream-oriented, and there is not sufficient space in the transport's buffer, WSASend will return with only part of the application's buffers having been consumed.
(参考:http://blog.csdn.net/zy100/article/details/6205204)

即,非阻塞模式下,WSASend不保证一次发完所有数据
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-6-9 10:52

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表