当前位置:首页 » 文件管理 » socket缓存大小

socket缓存大小

发布时间: 2025-03-15 15:10:05

linux下socket接收缓冲区有多大如何查看和修改,望高手赐教

int buflen = 65536*10;
设置读缓存大小
if(0!=setsockopt(m_sendUdpSock,SOL_SOCKET,SO_RCVBUF,&buflen,4))
{
return OS_ERROR;

}
设置写缓存大小
if(0!=setsockopt(m_sendUdpSock,SOL_SOCKET,SO_SNDBUF,&buflen,4))
{
return OS_ERROR;

}
socklen_t getnumlen=4;
读取写缓存大小
if(0!=getsockopt(g_sendUdpSock,SOL_SOCKET,SO_RCVBUF,&buflen,&getnumlen))
{
printf("\n%s\n",strerror(errno));
return OS_ERROR;

}

❷ 如何得知socket的缓存大小,这个缓存是否有上限,是否会溢出

一:如何得知socket的缓冲大小?
通过socket选项可以获得socket的缓冲大小。(以下是python代码,sock为socket对象)
sock.getsockopt(SOL_SOCKET,SO_RCVBUF):获取接收缓冲区的大小
sock.getsockopt(SOL_SOCKET,SO_SNDBUF):获得发送缓冲区的大小
注:UDP协议在内核实现中没有发送缓冲区。

二:这个缓冲是否有上限?
缓冲区存在上限,没一个socket对象的缓冲区有上限,系统中所有的socket缓冲区的总大小也存在上限。

三:是否会溢出?
TCP协议是可靠的有序的字节流协议,其可靠性与接收端的滑动窗口机制有关,而滑动窗口和TCP的接收缓冲区有关。
TCP协议的缓冲区不会溢出,如果接收缓冲区已满,则通告窗口为0,不能在接收发送端发过来的数据。如果发送缓冲区已满(则可以说明对端的接收缓冲区一定已满),应用层的send调用阻塞(采用阻塞式IO)。所以说TCP协议的缓冲区不会溢出。
UDP协议的缓冲区会溢出,UDP协议在实现上没有发送缓冲区,接收缓冲区存在上限,当UDP的接收缓冲区达到上限时,以后接收到的数据报直接丢弃,这也是UDP协议不可靠的一个原因。
-----------------------------------------------------------------------------------------------------------
推荐你看一下陶辉的”高性能网络编程“系列,肯定会受益匪浅。

热点内容
vps自动脚本 发布:2025-03-15 20:50:29 浏览:59
php刷新重复提交 发布:2025-03-15 20:50:26 浏览:306
艾莫迅plc编程电缆 发布:2025-03-15 20:44:05 浏览:302
妖妖灵脚本 发布:2025-03-15 20:36:56 浏览:256
公司自己搭建ftp 发布:2025-03-15 20:36:07 浏览:62
如何增加配置使半袖变得不单调 发布:2025-03-15 20:33:37 浏览:350
linux显示目录 发布:2025-03-15 20:30:42 浏览:661
素数算法表示 发布:2025-03-15 20:24:02 浏览:843
大话西游手游怎么看服务器等级 发布:2025-03-15 20:21:53 浏览:222
rsa加密c源代码 发布:2025-03-15 19:53:55 浏览:693