我们有一个Java应用程序,它使用启用了TCP keep alive的套接字
socket的(真) http://docs.oracle.com/javase/6/docs/api/java/net/Socket.html#setKeepAlive(boolean)
我们的测试显示保持活动功能在Windows主机上正常运行,但在Linux主机(Ubuntu Lucid)上没有。
我们发现Java中使用的SO_KEEPALIVE数值常量似乎与Linux中使用的常量不匹配
在java中:jdk / src / share / classes / java / net / SocketOptions.java:
public final static int SO_KEEPALIVE = 0x0008;
在Solaris中:include / sys / socket.h
#define SO_KEEPALIVE 0x0008 /* keep connections alive */
在Linux Sparc,MIPS,Alpha和PARISC中:/usr/src//linux-headers-2.6.32-19/arch/sparc/include/asm/socket.h:
#define SO_KEEPALIVE 0x0008
在其他Linux(x86和amd64)中:/usr/include/asm-generic/socket.h:
\#define SO_KEEPALIVE 9
我们认为这可以解释为什么保持活着不适用于Linux。任何人都可以提出其他原因或解决方案吗?
干杯 马克
答案 0 :(得分:3)
(我知道这更像是一个评论,但我没有足够的声誉来加一个。请不要再投票给我了。)
我建议您在linux上使用“netstat -anpo”来检查keepalive Timer是否真的为您的连接打开了。如果启用它,它将在“Timer”列中显示“keepalive”。否则就会“关闭”。