TCP在建立连接的时候,SYN分节会相互通告窗口,此窗口就是TCP内核的缓冲区大小,通常要求其为MSS的偶数倍。
为了充分利用TCP连接,需要估计TCP连接的传输速度和RTT值,得到在网络上传输的字节流大小,通过SO_RCVBUF和SO_SNDBUF可以查看本地socket的发送和接受缓冲区大小。
SO_RCVLOWAT和SO_SNDLOWAT 表示本地TCP接受low water,如果接受的字节大于该值,内核将其标识为可读;如果发送缓冲区的可用空间大于SO_SNDLOWAT,内核将其标识为可写;一般该值缺省为2048字节。
具体可查看UNIX网络编程P165。
|
|
这几行代码可以在ACE上查看缓冲区大小,搞不明白的是,ACE将get_option的第三个参数改成了char*,这样需要自己根据类型做转换。
在WinXP上,接收缓冲区8192字节,发送缓冲区64512字节。
TCP/UDP所返回的缓冲区大小是一致的。