![](/img/trans.png)
[英]Is the SocketChannel returned by ServerSocketChannel.accept() guaranteed to be connected?
[英]Closing a SocketChannel retrieved by ServerSocketChannel.accept()
我在守护进程线程上有一个计时器,该线程不断将数据写入SocketChannel
。 在主类中,我没有此套接字通道的对象引用,但是有此套接字通道连接到的ServerSocket
的引用。 所以我这样做是为了关闭频道。
socketChannel = serverSocket.accept();
socketChannel.close();
但是,守护进程线程的套接字通道关闭会带来延迟。 尽管它们都引用相同的套接字通道,但是即使在调用上述close()
直到几毫秒之后,计时器任务也会写入此套接字通道。
请提出如何确保关闭完成的建议。 这是一个非阻塞通道。
您的代码没有意义。 该代码根本不“引用相同的套接字通道”,因此也就不会关闭它:它接受一个新的套接字并关闭它,这也没有意义,至少对创建该代码的客户端来说没有意义。该新连接,并且可能期望对其进行某些服务,而不是立即关闭。
您只需要安排对现有通道的引用即可用于需要关闭它的代码。 这是Programming 101,根本不是网络问题。
您需要同步。 在这些线程之间共享一些对象。 然后,您可以执行以下操作:主线程:
synchronized(object){
socketChannel = serverSocketChannel.accept()
socketChannel.close().
}
守护程序线程:
synchronized(object){
timerTask.write(socketChannel, data)
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.