V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ChinaTelecom
V2EX  ›  Java

好好的 ServerSocket 久了会自己 Close 是什么情况.......

  •  
  •   ChinaTelecom · 2016-08-26 18:09:26 +08:00 · 3329 次点击
    这是一个创建于 3003 天前的主题,其中的信息可能已经有所发展或是发生改变。

    核心逻辑其实巨简单,就是

    while true:
    	try
    		socket = serverSocket.accept
    		xxxx(socket)
     		......
    	catch
    		......
    

    这样的。。然后程序跑个几小时基本没问题,然而有时更久后在有新连接进来以后 accept 居然会报 SocketClosedException 出现也没什么规律 不过有个三四次了 确认程序没有任何其他地方 close 这个 而且真关了的 ServerSocket 不是应该调用 accept 时立即爆 Exception 么 这个居然是继续阻塞着每来个新连接报一次?!

    6 条回复    2016-08-27 00:13:21 +08:00
    wizarot
        1
    wizarot  
       2016-08-26 18:55:01 +08:00
    你试试增加个心跳信号来维持看看?
    可能是超时了.
    ChinaTelecom
        2
    ChinaTelecom  
    OP
       2016-08-26 19:46:46 +08:00
    @wizarot accept 的超时我还特意设成 0 了...就是无限
    Comdex
        3
    Comdex  
       2016-08-26 19:51:21 +08:00
    是不是 clientSocket 关闭了....
    chareice
        4
    chareice  
       2016-08-26 21:26:35 +08:00
    心跳包,应用层的心跳包。
    owt5008137
        5
    owt5008137  
       2016-08-26 21:42:55 +08:00 via Android
    倒是贴一下 Exception 的内容啊。看看 Message 什么的,能有调用栈更好
    leaves615
        6
    leaves615  
       2016-08-27 00:13:21 +08:00
    链路黑洞
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2058 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 16:19 · PVG 00:19 · LAX 08:19 · JFK 11:19
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.