您的位置首页百科快答

域socket内核怎么查看命令

域socket内核怎么查看命令

的有关信息介绍如下:

域socket内核怎么查看命令

#include

#include

#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;

}

有3点值得说明:

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

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

3. 听一网友说过, tcp才有所谓的内核缓冲区, udp没有。