近日在学习《unix网络编程》一书, 感觉非常不错,今天正看到 “套接口选项”这章。 最后做个程序测试一下所在环境下的SO_RCVBUF(接收缓冲区), SO_SENBUF(发送缓冲区)的默认值。
在虚拟机中安装的是unbunt 9.04. 测试结果:
TCP Rcvbuf = 87380
TCP Sndbuf = 16384
输出的值感觉有些大,不知道是否正确。 我想在系统那里一定可以设置这个值才对,就是不知道在那个配置文件里。
接着我又在windows上做了下测试:
TCP Rcvbuf = 8192
TCP Sndbuf = 8192
=======================================================================
//linux 代码如下
#include #include #include int main() { int sockfd; //sock描述 int val; //val用来存SO_RCVBUF、SO_SNDBUF的放结果值。 socklen_t len; //val的长度 len = sizeof(val); sockfd = socket(AF_INET, SOCK_STREAM, 0); //创建一个文件描述符 if (getsockopt(sockfd, SOL_SOCKET, SO_RCVBUF, &val, &len) == 0) //取得 SO_RCVBUF printf("TCP Rcvbuf = %d/n", val); if (getsockopt(sockfd, SOL_SOCKET, SO_SNDBUF, &val, &len) == 0) //取得 SO_RCVBUF printf("TCP Sndbuf = %d/n", val); close(sockfd); return 0; }
------------------------------------------
//windows下代码
#include "stdafx.h" #include int _tmain(int argc, _TCHAR* argv[]) { WSADATA wsaData; int sockfd, val, len, ret; int iResult = WSAStartup( MAKEWORD(2,2), &wsaData ); if( iResult != NO_ERROR ) printf("Error at WSAStartup/n"); len = sizeof(val); sockfd = socket(AF_INET, SOCK_STREAM, 0); ret = getsockopt(sockfd, SOL_SOCKET, SO_RCVBUF, (char*)&val, &len); if (ret == 0) printf("tcp recvbuf = %d", val); ret = getsockopt(sockfd, SOL_SOCKET, SO_SNDBUF, (char*)&val, &len); if (ret == 0) printf("tcp sendbuf = %d", val); close(sockfd); getchar(); WSACleanup(); return 0; }