TCP/IP参数解析

SO_LINGER: setSoLinger(boolean on, int val)

 主要用于影响调用SOCKET关闭动作,val的单位在java里是百分之一秒

A.  当设置为setSoLinger(true, 0)时,关闭socket,TCP将丢弃保留在套接口发送缓冲区中的任何数据并发送一个RST给对方,而不是正常的四分组终止序列,这避免了TIME_WAIT状态,处于TIME_WAIT状态的端口是不会释放的,如果要重用这些端口可以在连接前,调用setReuseAddress(true)可设置端口重用。出现TIME_WAIT的原因是:A向B发送FIN包,B回复ACK确认,然后B向A发送FIN包,接着A向B发送ACK确认,之后A就进入TIME_WAIT状态,待过了2msl(大概1~4分钟)后,TIME_WAIT就会消失,如果想缩短该时间,需要修改windows注册表,或linux内核网络参数达到该目的,如设置为30秒

windows下修改HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters,添加名为TcpTimedWaitDelay的DWORD键值

linux下修改/etc/sysctl.conf,然后执行/sbin/sysctl -p 使修改生效,修改的信息如下:

net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 30

(网络来源:http://blog.chinaunix.net/u3/93926/showart_1873546.html

B. 当设置为setSoLinger(true, xxx)时,,关闭socket将被阻塞,直到TCP将等待缓冲区中的数据发送完毕或出现超时

C. setSoLinger(false, xxx),关闭socket立刻关闭,缺省是该值(我还没确定是发送一个RST给对方,还是是正常的四分组终止序列)

 

SO_TIMEOUT:在调用socket相关的具有阻塞特性的方法前设置,可以控制阻塞超时,一般使用在数据接收读取时,如多久没接收读取到远程发送过来的数据,出现超时。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值