服務器和客戶端應用程序判斷對方是否已經關閉連接的方法:
1)read系統調用返回0(收到結束報文段)
2)當管道讀端關閉時,寫端文件描述符上的POLLHUP事件被觸發;
當socket連接被對方關閉時,socket上的POLLRDHUP事件被觸發。IP地址轉換函數:
#include <arpa/inet.h>
int inet_pton(int af, const char* src, void* dst);
const char* inet_ntop(int af, const void* src, char* dst, socklen_t cnt);
inet_pton將用字符串表示的IP地址src轉換成用網絡字節序整數表示的IP地址。inet_ntop進行相反的轉換
3.帶RST標誌的報文段爲復位報文段,通知對方關閉連接或重新建立連接。產生復位報文段的3種情況:
1) 當客戶端訪問一個不存在的端口時,目標主機將給它發送一個復位報文段。
2) 客戶端向服務器處於TIME_WAIT狀態的端口發起連接時,也將收到復位報文段。
3) 希望異常終止一個連接時,向對方發送一個復位報文段,使用socket選項SO_LINGER來發送復位報文段。
4) 一端關閉或異常終止了連接,而對方沒有接收到結束報文段(FIN)還維持着原來的連接,這種狀態稱爲半打開狀態。向處於半打開狀態的連接寫入數據,對方將回復一個復位報文段。