[英]Determine the state of a TCP socket
我開始學習如何在C ++中實現TCP服務器/客戶端(在Windows和Linux上)。 目前,我正在實現服務器(並以telnet作為客戶端進行測試)。 服務器應用程序像字符一樣發送和接收數據。(在理解所有服務器端之后,我將實現客戶端)。 但是我需要找到一種編程方式(C ++或OS API)來查詢TCP套接字狀態(ESTABLISHED,FIN_WAIT_2,CLOSE_WAIT等),而無需使用write()/ recv()來處理錯誤異常。
例如:
問題是:如何查詢TCP套接字狀態以確定需要關閉此會話? (不使用send()/ recv(),就像“ netstat”一樣)
注意:我嘗試了“ getsockopt(socket,SOL_SOCKET,SO_ERROR,&optval和&optlen)”,但是當狀態為ESTABLISHED / CLOSE_WAIT且“ optval”也未更改時,它返回0。
阻塞模式套接字的常用技術是專用於讀取套接字的線程。 當recv()
返回0時,表示對等方已關閉連接,並且端口現在處於CLOSE_WAIT
狀態。
或者,您可以使用select()
和朋友告訴您套接字何時可讀,包括recv()
返回零的情況。 使用FIONREAD
作為輪詢機制實際上是沒有用的,因為它沒有涵蓋這種情況。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.