如何设置socket缓冲区大小

如何设置socket缓冲区大小,第1张

右键单击“我的电脑”,选择“属性”,再选择“性能”,单击左面“文件系统”,有一个“此计算机的主要用途(T)”选项,下拉那个箭头,将“台式机”改为“网络服务器”,然后确定。再选择右面的“虚拟内存”,选择“用户自己指定虚拟内存设置(M)”,然后将最大值和最小值都改为你电脑内存的数值乘以2,比如是128兆内存,则设置为“256”,然后确定,不用理会显示的提示,确定以后需要重新启动。

#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

}

有3点值得说明:

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

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

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


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/6388658.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-21
下一篇 2023-03-21

发表评论

登录后才能评论

评论列表(0条)

保存