请教,setsockopt修改缓冲区大小有何影响?能否用这个来对某个socket进行收发速率调整?对UDP也适用吗?
解决方案 »
- 苍天啊,为什么accept 不阻塞
- vista和win7下IMM的一部分函数失效,用TSF,QueryInterface函数失败,求救。
- ocx文件如何做成exe文件在客户端注册
- 用CSocket的send发送图片,总是返回-1,GetLastError()返回10014
- CRichEditCtrl 如何插入多行字符串? 如何让滚动条始终滚在最下方?
- 什么是虚拟仪器技术,如何在VC++中实现?
- 如何把对话框的制定区域(CRect)存为位图!
- 帮忙看一下这段程序,KEYWORD:API,C,SUBCLASS
- winnt文件系统开发资源网
- 调用SetTimer(1,100,NULL),为何在运行时会在此出错?
- 请求《Visual C++图形用户界面开发指南》配套书籍的光盘代码
- 【暴笑:】好朋友去见公婆的经过,嘿嘿,拿来大家分享下。。。
对于接受缓冲区,只有当接受缓冲区满时,系统才会调用相应的函数来取数据,如果缓冲区设置的太大,则可能接受数据的时间相对较长(提交到应用层),缓冲区太小,则导致频繁接受数据(这中间是需要时间,有时可能会导致数据丢失);发送缓冲区也是如此,不过有一点不同,就是系统调用函数发送数据不是在发送缓冲区满的时候,而是在发送缓冲区快满的时候,因为系统还需要将发送缓冲区中的数据复制到发送缓冲区的某个区域中来发送,所以不可能存满了才发送.底层都会有一个默认合理的缓冲区大小(利用SDK编程时,一般也可以不设置这个值而使用默认值),使用它就可以满足大部分要求了.
UDP也适用,因为它也需要系统来发送和接受数据
When a Windows Sockets implementation supports the SO_RCVBUF and SO_SNDBUF options, an application can request different buffer sizes (larger or smaller). The call to setsockopt can succeed even when the implementation did not provide the whole amount requested. An application must call getsockopt with the same option to check the buffer size actually provided.