winsock 的 NODELAY 和 SO_SNDBUF 设置问题

Longee 2013-11-06 02:12:32
发送端使用TCP协议,阻塞方式:
当发送端设置了 TCP_NODELAY 后,SO_SNDBUF 还起作用吗?
按照MSDN里面的说法,当设置TCP_NODELAY 后,winsock就禁用了Nagle算法,发送端调用了send函数后,数据就直接被投递到网络上了。那么是不是说send函数中的数据不再被copy到SNDBUF中了?

另一个问题:
设置TCP_NODELAY 的时候,调用send函数返回后表示数据已经被投递到网络上了。
当send函数还没有返回的时候,它在等待什么呢,是等待网络设备接收数据吗?
应用程序有没有办法减少这个等待时间,或者取得一个需要等待多长时间的值?
...全文
535 3 打赏 收藏 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
wxliangzyt 2013-11-11
  • 打赏
  • 举报
回复
是這樣的喲,,,,,,,,,,,,
Longee 2013-11-07
  • 打赏
  • 举报
回复
引用 1 楼 laqhelen 的回复:
TCP_NODELAY 不是不copy 直接send,是指有了数据就马上发送,不等待 200ms 的 ACK 超时。这有socket代码,有个得各种选项的程序,你可以看看: http://download.csdn.net/detail/geoff08zhang/4571358
有点明白了,是不是可以这么说,NODELAY只对SNDBUF起作用,只监控SNDBUF的数据,当SNDBUF中有数据,就将数据投递到网络上,而send函数在没有将SNDBUF设置为0的时候,只做将application的缓冲copy到SNDBUF中的操作,只有能将应用程序缓冲copy到SNDBUF中,send函数就返回了。
laqhelen 2013-11-06
  • 打赏
  • 举报
回复
TCP_NODELAY 不是不copy 直接send,是指有了数据就马上发送,不等待 200ms 的 ACK 超时。这有socket代码,有个得各种选项的程序,你可以看看: http://download.csdn.net/detail/geoff08zhang/4571358

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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