域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没有。