TCP常见异常

1、CLOSE_WAIT

被动关闭之后,没有发送FIN报文,大部分是代码原因,被动关闭之后没有关闭连接。

2、TIME_WAIT

是由linux内核定时回收的,由TIME_WAIT到CLOSED的时间为2MSL,可以调整内核参数。

3、Connection reset

是服务器端因为某种原因关闭了Connection,而客户端依然在读写数据,此时服务器会返回复位标志“RST”,然后此时客户端就会提示“java.net.SocketException: Connection reset”。

注意:Socket.close()方法的语义和TCP的“FIN”标志语义不一样:发送TCP的“FIN”标志表示我不再发送数据了,而Socket.close()表示我不在发送也不接受数据了。问题就出在“我不接受数据” 上,如果此时客户端还往服务器发送数据,服务器内核接收到数据,但是发现此时Socket已经close了,则会返回“RST”标志给客户端。

a、服务器返回了“RST”时,如果此时客户端正在从Socket套接字的输出流中读数据则会提示 “Connection reset”;
b、服务器返回了“RST”时,如果此时客户端正在往Socket套接字的输入流中写数据则会提示 “Connection reset by peer”;

4、Socket timeout

Java的网络编程Socket常常用于各种网络工具,比如数据库的jdbc客户端,redis客户端jedis,各种RPC工具java客户端等。

1、建立连接timeout,暂时就叫 connect timeout;
2、读取数据timeout,暂时就叫 so timeout。
      socket.setSoTimeout(0):A timeout of zero is interpreted as an infinite timeout

 

Ref:

https://www.cnblogs.com/sunxucool/p/3449068.html

http://www.importnew.com/26486.html

https://blog.csdn.net/maligebazi/article/details/80304894

 

转载于:https://my.oschina.net/u/3787772/blog/1975672

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值