我使用epoll等待tcp流的可讀取事件,事件來了后讀取訊息。
會不會出現這種情況:
1、客戶端A要發送6KB資料,頭部帶有資料長度資訊
2、但是其他客戶端也發送了N位元組資料,這時候服務端的TCP內核緩沖區只剩下60byte可以對資料進行快取。然后流量控制通知客戶端A發送60byte。
3、資料到達服務端后,信號通知這個socket(非阻塞)可讀 epoll_wait回傳
4、我使用read函式讀取資料獲取頭部資訊,得知資料的長度再使用readn(sock, buf, n-head);
5、read得到60位元組的資料后回傳-1,errno置為EAGAIN
(剩余tcp流未到達的情況應該也是一樣?)
現在問題是我是否是要存盤當前套接字并記錄讀到的位元組數。然后下次回傳產生可讀的事件后再對讀到的資料進行strcat。
我看網上的epoll例子大多只有一個read就完成了
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/166908.html
標籤:C語言
