请教高手Send返回值问题!!

Squall_zy 2010-05-11 11:59:39
TCP通信中,我使用 EventSelect 来处理数据发送与接收。
接收数据响应:FD_READ
发送数据响应:FD_WRITE (主要针对WSAEWOULDBLOCK)

问高手一个问题,send 函数, MSDN上说,如果发送成功,有可能返回小于“发送缓存大小”的值。我想问,我做了很多实验和跟踪,为什么我从来没有遇到这种情况?

If no error occurs, send returns the total number of bytes sent, which can be less than the number requested to be sent in the len parameter. Otherwise, a value of SOCKET_ERROR is returned。

哪位高手遇到过“can be less than the number ....”的情况么?
...全文
131 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
goindowm 2010-06-16
  • 打赏
  • 举报
回复
初学者来学习的!
Squall_zy 2010-06-12
  • 打赏
  • 举报
回复
顶一下
Squall_zy 2010-06-03
  • 打赏
  • 举报
回复
顶起来,楼上简直答非所问。

看清楚题目再答。

我看过很多文档,好像linux下的Send的返回值可以是“一部分”,而Windows下的Send要么全发出去,要么是发送失败。
meteor_an 2010-06-02
  • 打赏
  • 举报
回复
学习中。。。
lww886 2010-06-01
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 chinacoding 的回复:]

阻塞模式下的socket,如果对方缓存不够用的话,本地send一般会阻塞,等到对方缓存有足够大小时,发送数据成功后才返回,不会出现你说的那种返回值小于指定值的情况。
但是在异步模式下会出现你说的情况。
[/Quote]
恩!
chinacoding 2010-05-28
  • 打赏
  • 举报
回复
阻塞模式下的socket,如果对方缓存不够用的话,本地send一般会阻塞,等到对方缓存有足够大小时,发送数据成功后才返回,不会出现你说的那种返回值小于指定值的情况。
但是在异步模式下会出现你说的情况。
Snakebite1985 2010-05-11
  • 打赏
  • 举报
回复
据说当协议栈的缓存不够大,或者网络太拥挤的情况下,send()会返回比期望更小的数。

但是我也没遇到过。在老的系统当中,也许可以通过SO_SNDBUF将缓存变小从而认为制造这种情况。但是现在很多TCP/IP栈都已经不支持SO_SNDBUF了,这个选项只是为了和以前的程序兼容而留下的。

7,540

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 VC.NET
社区管理员
  • VC.NET社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧