如果我有一个Selector接受sockets并将其推入队列以供其他线程处理,并且没有线程占用套接字(例如两分钟),则客户端会推入数据,然后超时并断开连接。当thread然后采用那些现在关闭的sockets之一并尝试从中读取时,它将获取客户端已发送的数据,还是没有什么要读取?

最佳答案

这取决于“切断”的含义。


如果您自己关闭了套接字,您将通过各种SocketException: socket closed方法获得read()
如果连接被对等端正常关闭,则在发出流结束信号之前,将读取所有未决数据。
如果连接被异常终止重置,则所有挂起的数据都将丢失。

07-24 09:49
查看更多