-
請求連線時,應維護乙個資訊表,以了解連線了哪些 IP,當客戶端退出時,所有問題都解決了。
-
1)將接收到的套接字設定為非同步模式;
2)使用select()函式測試套接字是否可讀;
3) 如果 select() 函式返回的值為 1,但 recv() 函式讀取的資料長度為 0,則套接字已斷開連線。
如果 recv() 的返回值小於或等於 0,則表示客戶端連線已斷開,但需要判斷 errno 是否等於 eintr。 如果 errno=eintr,則表示程式接收到中斷訊號後返回 recv() 函式,套接字連線應該還是正常的,步驟應該關閉套接字連線。
-
在非阻塞模式下,如果暫時沒有資料,返回的值也會<=0,如果使用阻塞模式,則返回的值<=0可以認為無效。
使用 select() 函式測試套接字是否可讀時,如果 select() 函式返回值 1,而 recv() 函式讀取的資料長度為 0,則套接字斷開連線。
經過**測試後,如果程序接收到一些訊號,例如:intr,recv() 返回值小於或等於 0,這是需要判斷 errno 是否等於 eintr,如果 errno ==eintr 則表示程式接收到訊號後返回 recv 函式,套接字連線仍然正常, 並且插座連線不應關閉。
如果寫,我覺得還是有一些情況要考慮的,就是寫得太快的時候,有可能是緩衝區滿了,這是,errno是eagain,根據實際需要,如果errno是eagain,多寫幾次。
當然,也有類似讀取時寫入的情況,需要勾選errno,如果是eagain或eintr,最好不要立即終止操作,再試一次。
您屬於PPPOE撥號上網 當你開啟網路時,網路自然是斷開的,寬頻連線也是斷開的,帶有防火牆的廣域網微口(PPOE)只是乙個提醒,你的網路已經斷開連線,你必須連線才能訪問網際網絡。 >>>More