对于tcp连接,有没有办法在没有其他数据(只有ack数据包)的情况下向另一端发送ACK数据包。
我知道我们可以通过TCP Keep alive选项来实现,但Solaris 10支持它。
答案 0 :(得分:2)
如果您刚接收,TCP堆栈将自动发送大量没有数据的ACK。但是,没有办法从应用程序发送任何类型的ACK。
答案 1 :(得分:2)
检测断开连接的可靠方法是在应用程序级协议中构建null / ping / echo类型的消息,并让应用程序定期发送这些消息。如果没有得到及时答复,则可以假定连接已被删除。大多数旨在涉及长期连接的协议都包含此类消息(例如,IRC,IMAP和SSH都可以)。
(毕竟,即使您可以发送裸TCP ACK消息,另一端也不必响应它们,因为它已经收到不再有数据来自行确认)。
答案 2 :(得分:1)
您首先发布的状态是Solaris 10支持TCP保持活动,后来它不支持...
Solaris支持使用ndd命令全局设置tcp keepalive,例如:
ndd -set /dev/tcp tcp_keepalive_interval 120000
OpenSolaris和Solaris 11 Express支持每插槽keepalive设置。 您可以使用SO_KEEPALIVE启用它并使用TCP_KEEPALIVE_THRESHOLD和TCP_KEEPALIVE_ABORT_THRESHOLD进行调整。
http://docs.oracle.com/cd/E19082-01/819-2254/6n4iaov75/index.html