http://www.ixpub.net/thread-1426471-2-1.html
如果write的字节数>socket发送缓冲区,tcp做何处理?
如果write的字节数>socket发送缓冲区,tcp做何处理?
原帖由 xltao 于 2006-6-9 13:35 发表
"我前面所说的"能发多少发多少.. 返回发送成功的字节数"适用于TCP连接的阻塞模式:
如果需要发送的字节数超出缓存大小,系统依然流式发送,全部发送完需要发送的字节后返回(可以理解为阻塞);
在非 ...
如果是非阻塞模式,是在设定的发送时间范围内能发多少发多少.
在实际应用中,情况如下:
在非阻塞模式下,一般是用setsockopt函数设置发送阻塞的时间,然后调用send()发送数据,当超出这个时间,send函数会返回已发送的数据大小, 但是请注意此时缓存中可能还有些数据没有发送到网络上.
那么当在应用层再一次调用send函数时,就会报告经典的错误:
Resource temporarily unavailable
那么如果是阻塞情况,send函数会一直等到所有应用层的数据全部发送完毕再返回...
另外,如果是用UDP作为发送端,那么都不需要考虑阻塞不阻塞的情况,会报告错误:
Message too long
[ 本帖最后由 yulc 于 2006-6-10 10:28 编辑 ]