setsockopt用法及参数详解

请教Linux关于UDP最大缓冲区设置?

1. tcp 收发缓冲区默认值 [root@ ]# cat /proc/sys/net/ipv4/tcp_rmem 4096 87380 4161536 87380 :tcp接收缓冲区的默认值 [root@ ]# cat /proc/sys/net/ipv4/tcp_wmem 4096 16384 4161536 16384 : tcp 发送缓冲区的默认值 2. tcp 或udp收发缓冲区最大值 [root@ ]# cat /proc/sys/net/core/rmem_max 131071 131071:tcp 或 udp 接收缓冲区最大可设置值的一半。 也就是说调用 setsockopt(s, SOL_SOCKET, SO_RCVBUF, &rcv_size, &optlen); 时rcv_size 如果超过 131071,那么 getsockopt(s, SOL_SOCKET, SO_RCVBUF, &rcv_size, &optlen); 去到的值就等于 131071 * 2 = 262142 [root@ ]# cat /proc/sys/net/core/wmem_max 131071 131071:tcp 或 udp 发送缓冲区最大可设置值得一半。 跟上面同一个道理 3. udp收发缓冲区默认值 [root@ ]# cat /proc/sys/net/core/rmem_default 111616:udp接收缓冲区的默认值 [root@ ]# cat /proc/sys/net/core/wmem_default 111616 111616:udp发送缓冲区的默认值 4. tcp 或udp收发缓冲区最小值 tcp 或udp接收缓冲区的最小值为 256 bytes,由内核的宏决定; tcp 或udp发送缓冲区的最小值为 2048 bytes,由内核的宏决定

如何判断socket的连接状态?

法一:当recv()返回值小于等于0时,socket连接断开。但是还需要判断errno是否等于EINTR,如果errno==EINTR则说明recv函数是由于程序接收到信号后返回的,socket连接还是正常的,不应close掉socket连接。

法二:structtcp_infoinfo;intlen=sizeof(info);getsockopt(sock,IPPROTO_TCP,TCP_INFO,&info,(socklen_t*)&len)

;if((info.tcpi_state==TCP_ESTABLISHED))则说明未断开else断开法三:若使用了select等系统函数,若远端断开,则select返回1,recv返回0则断开。其他注意事项同法一。

法四:intkeepAlive=1;//开启keepalive属性intkeepIdle=60;//如该连接在60秒内没有任何数据往来,则进行探测intkeepInterval=5;//探测时发包的时间间隔为5秒intkeepCount=3;//探测尝试的次数.如果第1次探测包就收到响应了,则后2次的不再发.setsockopt(rs,SOL_SOCKET,SO_KEEPALIVE,(void*)&keepAlive,sizeof(keepAlive))

;setsockopt(rs,SOL_TCP,TCP_KEEPIDLE,(void*)&keepIdle,sizeof(keepIdle))

;setsockopt(rs,SOL_TCP,TCP_KEEPINTVL,(void*)&keepInterval,sizeof(keepInterval))

;setsockopt(rs,SOL_TCP,TCP_KEEPCNT,(void*)&keepCount,sizeof(keepCount));设置后,若断开,则在使用该socket读写时立即失败,并返回ETIMEDOUT错误

到此,以上就是小编对于setsockopt nodelay的问题就介绍到这了,希望这2点解答对大家有用。

网站题目:setsockopt用法及参数详解
标题网址:http://www.shufengxianlan.com/qtweb/news10/362610.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联