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

热点内容
linux解压bin 发布:2025-03-15 19:40:25 浏览:381
存储数据为什么只能使用两种状态 发布:2025-03-15 19:40:21 浏览:261
平方的运算法则 发布:2025-03-15 19:38:57 浏览:969
江苏省苏州市社保卡初始登录密码是多少 发布:2025-03-15 19:38:55 浏览:514
安卓主板哪里有卖 发布:2025-03-15 19:26:10 浏览:30
Q9源码 发布:2025-03-15 19:24:21 浏览:176
芬兰编程教育 发布:2025-03-15 18:59:46 浏览:426
因特网的服务器地址 发布:2025-03-15 18:53:01 浏览:892
手机实体店什么配置好 发布:2025-03-15 18:32:35 浏览:169
便携式电脑的原始密码是什么 发布:2025-03-15 18:25:52 浏览:798