如果我有一个Selector
接受sockets
并将其推入队列以供其他线程处理,并且没有线程占用套接字(例如两分钟),则客户端会推入数据,然后超时并断开连接。当thread
然后采用那些现在关闭的sockets
之一并尝试从中读取时,它将获取客户端已发送的数据,还是没有什么要读取?
最佳答案
这取决于“切断”的含义。
如果您自己关闭了套接字,您将通过各种SocketException: socket closed
方法获得read()
。
如果连接被对等端正常关闭,则在发出流结束信号之前,将读取所有未决数据。
如果连接被异常终止重置,则所有挂起的数据都将丢失。