呵呵呵呵呵

萝莉有三好,柔体 轻音 易推倒。女神有三宝,干嘛 呵呵 去洗澡。宅男有三好:Dota 基友 破电脑。


windows下获取/设置socket缓冲区大小示例

windows下获取/设置socket缓冲区大小示例

    #include <winsock2.h>  
    #include <stdio.h>  
    #pragma comment(lib, "ws2_32.lib")  
      
    int main() 
    { 
        WORD wVersionRequested; 
        WSADATA wsaData; 
        wVersionRequested = MAKEWORD(1, 1); 
        WSAStartup( wVersionRequested, &wsaData ); 
     
     
        SOCKET sockClient1 = socket(AF_INET, SOCK_STREAM, 0); 
     
        // 获取sockClient1对应的内核接收缓冲区大小 
        int optVal = 0; 
        int optLen = sizeof(optVal); 
        getsockopt(sockClient1, SOL_SOCKET, SO_RCVBUF, (char*)&optVal, &optLen); 
        printf("sockClient1, recv buf is %d\n", optVal); // 8192 
     
     
        SOCKET sockClient2 = socket(AF_INET, SOCK_STREAM, 0); 
     
        // 设置sockClient2对应的内核接收缓冲区大小 
        optVal = 1024; 
        setsockopt(sockClient2, SOL_SOCKET, SO_RCVBUF, (char*)&optVal, optLen); 
         
     
        // 再次获取sockClient1对应的内核接收缓冲区大小 
        getsockopt(sockClient1, SOL_SOCKET, SO_RCVBUF, (char*)&optVal, &optLen); 
        printf("sockClient1, recv buf is %d\n", optVal); // 8192 
     
     
        // 获取sockClient2对应的内核接收缓冲区大小 
        getsockopt(sockClient2, SOL_SOCKET, SO_RCVBUF, (char*)&optVal, &optLen); 
        printf("sockClient2, recv buf is %d\n", optVal); // 1024 
         
     
        while(1); 
     
     
        closesocket(sockClient1); 
        closesocket(sockClient2); 
        WSACleanup(); 
     
        return 0; 
    } 

 1. 上面我们仅仅写了接收的内核缓冲区, 关键字是SO_RCVBUF, 如果是发送的内核缓冲区, 那就用SO_SNDBUF, 有兴趣的童鞋可以稍微修改一下上面程序即可。

2. 从程序的结果我们可以看到, sockClient1和sockClient2两者的发送内核缓冲区没有任何关系。
    

更多内容:

Linux下获取tcp 和 udp 套接字收发缓冲区大小的方法
TCP协议的send和recv函数与过程
Google https搜索不提供关键字referer信息
php strlen mb_strlen差异与区别
linux socket设置缓冲区大小

本文链接地址:http://www.hehehehehe.cn/i/783.html