是否在C套件中支持" SO_SNDTIMEO“等Java套接字支持选项?

时间:2017-10-24 09:36:57

标签: java android sockets

目前我遇到的情况是客户端完全断开连接而不发送EOF(例如客户端是手机并且突然将网络改为wifi到4G),但我的服务器仍会向该客户端发送消息。这将至少需要10分钟,直到服务器发现对等方无法访问。

Java中有一个选项可以减少发送超时,就像C中的SO_SNDTIMEO一样吗?

1 个答案:

答案 0 :(得分:0)

Android文档非常简单明了:https://developer.android.com/reference/java/net/SocketOptions.html

SO_TIMEOUT是列表中的一部分,但它仅适用于阅读操作。发送操作完成通常不表示远程主机已接收到数据包,而是指示该数据包已被内核的网络队列接受,并且将很快发送""

我不会责怪Android团队没有(或至少没有通告)发送超时的套接字选项,因为您在完成send时无法获得更多信息。它实际上达到了应用程序级别来检测断开连接。增强您的协议,引入应用程序级别的Keepalive,尝试非阻塞套接字模式以避免长时间操作,跟踪远程主机实际接收的内容 - 发送是不够的。这将导致更强大的应用程序。