![](/img/trans.png)
[英]Apache HttpClient TCP Keep-Alive (socket keep-alive)
[英]Socket keep alive not working on Linux
我們有一個Java應用程序,該應用程序使用啟用了TCP保持活動狀態的套接字
Socket.setKeepAlive(true) 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
我們認為這可以解釋為什么keep live無法在Linux上運行。 誰能提出其他原因或解決方案?
干杯馬克
(我知道這更像是評論,但是我沒有足夠的聲譽來添加評論。請不要對我投反對票。)
我建議您可以在Linux上使用“ netstat -anpo”來檢查keepalive Timer是否真的為您的連接打開了。 如果啟用,它將在“計時器”列中顯示“ keepalive”。 否則將為“關閉”。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.