我有一個關於TCP連接中的非阻塞套接字的問題。將TCP客戶端套接字設置爲非阻塞:服務器vs客戶端
我已經實現了兩個C++類,一個用於TCP服務器和一個客戶端。服務器有兩個套接字文件描述符,一個用於服務器,一個用於客戶端。客戶端有一個套接字文件描述符。
我的服務器異步運行和我的客戶在一個固定的速度運行。因此,我想要有一個無阻塞的套接字來將數據從客戶端發送到服務器s.t.客戶端可以以固定速率發送數據而不會停止,並且服務器會同時讀取所有已緩衝的數據。
所以我的問題是:如果我在客戶端或服務器類中將客戶端套接字設置爲非阻塞,是否有所作爲?(使用fcntl(this->newsockfd_, F_SETFL, fcntl(this->newsockfd_, F_GETFL, 0) | O_NONBLOCK)
,其中this->newsockfd_
是這兩類客戶的套接字文件描述符)
我在PROGRAMM嘗試這樣做,它似乎像客戶端套接字設置爲非阻塞的客戶端類沒有做的伎倆,但將其設置在服務器級別上。但是,我不明白爲什麼這應該有所作爲。
在什麼區別?將套接字設置爲非阻塞意味着套接字讀取,寫入和其他套接字操作將立即返回。然後,您必須準備好處理沒有數據傳輸的情況,因爲操作通常會因爲沒有可讀取的數據或出站網絡緩衝區已滿而被阻塞等。 –