使用基於代理的HTTP隧道時,TCP套接字有問題。通過HTTP代理的TCP套接字在空閒超時後斷開連接
客戶端(C++)打開一個TCP套接字到服務器(JAVA)。我添加了對HTTP代理的支持。一切工作不錯,客戶端發送「HTTP連接」的請求,這樣以後繼續爲純TCP連接:
CONNECT servername:5555 HTTP/1.1
Host: servername:5555
Proxy-Connection: Keep-Alive
HTTP/1.1 200
然而,如果空閒超時在代理配置並沒有發送任何實際數據,連接將被終止,雖然客戶端每60秒發送一次TCP保持活動數據包。空閒超時配置爲10分鐘。
TCP保持活躍被配置如下: 的WSAIoctl(插座,SIO_KEEPALIVE_VALS,&活着,的sizeof(活着),NULL,0,& dwBytesRet,NULL,NULL)
客戶端IP - 192.168.91.xxx
代理IP - 192.168.92.yyy
244 47.133017000 192.168.91.xxx 192.168.92.yyy TCP 55 [TCP Keep-Alive] 64351 > 808 [ACK] Seq=4336 Ack=13084 Win=65700 Len=1
245 47.133336000 192.168.92.yyy 192.168.91.xxx TCP 66 [TCP Keep-Alive ACK] 808 > 64351 [ACK] Seq=13084 Ack=4337 Win=65536 Len=0 SLE=4336 SRE=4337
任何想法如何保持連接活着嗎?
雖然HTTP1.1應該自動執行,但我試圖添加「Connection:Keep-Alive」標頭。無論如何,這並沒有幫助。