1
按照书籍 Unix网络编程 第一卷第二部分 第七章套接口选项164页所述:
引用

接受缓冲区被TCP和UDP用来将接收到的数据一直保存到由应用进程来取,对于TCP来说,套接口接收缓冲区中可用空间的大小就是TCP通告另一端的大小。TCP套接口接收缓冲区不可能溢出!

如果对方 发送大于该值的包,将被直接丢弃。


既然这么说,为何会出现10055错误呢?让我很怀疑!

另外书中还提到:
引用

当设置TCP套接口接收缓冲区的大小时,函数调用的顺序是非常重要的,这是因为TCP的窗口选项是建立连接时候发送SYN与对方互换得到的。对于一个客户,这意味着SO_RCVBUF选项必须在调用Connect之前设置。对于一个服务器,这意味着在调用listen之前必须给监听套接口设置这个选项。给已经连接套接口设置这个选项对可能的窗口规模选项无任何影响。因为accept要等到三次握手完成才会创建并返回已连接套接口。


而在windows操作系统中,使用代码:



竟然表示设置成功了。

假设1:的确设置成功,说明了什么?难道微软在处理的时候重新发送SYN来确定这个缓冲区的大小?一会写个程序用Ethereal来抓包看看是否真的如此。
假设2:如果没有设置成功,为何getsocket返回的值表示成功?

假设3:如果仅仅在服务器端设置这个Buffer的话,而客户端比这个小,会以哪个为标准呢?  分析一下,应该是可以的。
Tags: , , , | 引用(0)
wyz
2008/03/14 14:42
这个buffer与tcp窗口无关, 不是窗口. 是实现协议的需的一些内部buffer, 就像file io 里的 内存buffer一样.
huzhangyou2002 回复于 2008/08/18 18:54
的确是如此 呵呵 谢谢回复
分页: 1/1 第一页 1 最后页
发表评论
表情
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
打开HTML
打开UBB
打开表情
隐藏
记住我
昵称   密码   游客无需密码
网址   电邮   [注册]