请教,setsockopt修改缓冲区大小有何影响?能否用这个来对某个socket进行收发速率调整?对UDP也适用吗?

解决方案 »

  1.   

    对收发速率有影响.
    对于接受缓冲区,只有当接受缓冲区满时,系统才会调用相应的函数来取数据,如果缓冲区设置的太大,则可能接受数据的时间相对较长(提交到应用层),缓冲区太小,则导致频繁接受数据(这中间是需要时间,有时可能会导致数据丢失);发送缓冲区也是如此,不过有一点不同,就是系统调用函数发送数据不是在发送缓冲区满的时候,而是在发送缓冲区快满的时候,因为系统还需要将发送缓冲区中的数据复制到发送缓冲区的某个区域中来发送,所以不可能存满了才发送.底层都会有一个默认合理的缓冲区大小(利用SDK编程时,一般也可以不设置这个值而使用默认值),使用它就可以满足大部分要求了.
    UDP也适用,因为它也需要系统来发送和接受数据
      

  2.   

    SO_RCVBUF and SO_SNDBUF 
    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.