#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)
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没有。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)