当前位置:首页 » 文件管理 » 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协议不可靠的一个原因。
-----------------------------------------------------------------------------------------------------------
推荐你看一下陶辉的”高性能网络编程“系列,肯定会受益匪浅。

热点内容
java返回this 发布:2025-10-20 08:28:16 浏览:721
制作脚本网站 发布:2025-10-20 08:17:34 浏览:988
python中的init方法 发布:2025-10-20 08:17:33 浏览:695
图案密码什么意思 发布:2025-10-20 08:16:56 浏览:850
怎么清理微信视频缓存 发布:2025-10-20 08:12:37 浏览:753
c语言编译器怎么看执行过程 发布:2025-10-20 08:00:32 浏览:1095
邮箱如何填写发信服务器 发布:2025-10-20 07:45:27 浏览:325
shell脚本入门案例 发布:2025-10-20 07:44:45 浏览:202
怎么上传照片浏览上传 发布:2025-10-20 07:44:03 浏览:890
python股票数据获取 发布:2025-10-20 07:39:44 浏览:851