我們在設備上使用Linux 2.6.33。將使用PC應用程序通過TCP套接字連接到設備。根據應用程序的要求,最多可以傳輸1 MB的數據。如何突然關閉TCP套接字並重新連接
考慮如果應用程序已連接並正常工作,並且設備的IP地址發生變化(可通過命令執行)。現在,連接在應用程序中突然中斷,但在設備上卻沒有。但用戶期望用新的IP地址重新連接到設備。在某些情況下,「send()」已經過了一半,並且可能沒有發送完所有數據,然後這種關閉不會立即發生,因此用戶將無法重新連接,直到套接字在設備上關閉。
我使用「關閉(襪子,RDWR),接近(襪子)」序列 了netstat輸出顯示:
$ netstat -nt
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 29200 xx.xx.xx.xx:3000 xx.xx.xx.xx:50639 ESTABLISHED
因爲它顯示了發送-Q是仍然不爲空,因此該連接仍然處於ESTABLISED狀態這種情況。 socket在一段時間後關閉,我不知道它有多少時間,可以通過套接字實現來定義
如何關閉t他的套接字立即通過PC應用程序可以通過相同的TCP端口進行新的連接?
它是通過完成未決發送所需的時間來定義的,或者如果它們未被確認則中止它們。我不明白'用戶期望重新連接到具有新IP地址的設備'的部分。爲什麼一個新的IP地址? – EJP
由於以太網IP地址被用戶命令更改。現在,用戶需要在IP更改後立即重新啓動應用程序,並重新啓動新的IP地址。 –
如何通過丟棄未完成的Send-Q數據包找出關閉此孤立套接字所需的時間? –