Socket保持活着,无法在Linux上运行

时间:2012-03-30 13:20:26

标签: java linux sockets tcp keep-alive

我们有一个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。任何人都可以提出其他原因或解决方案吗?

干杯 马克

1 个答案:

答案 0 :(得分:3)

(我知道这更像是一个评论,但我没有足够的声誉来加一个。请不要再投票给我了。)

我建议您在linux上使用“netstat -anpo”来检查keepalive Timer是否真的为您的连接打开了。如果启用它,它将在“Timer”列中显示“keepalive”。否则就会“关闭”。