簡體   English   中英

用`read`和`epoll`異步讀取套接字

[英]Reading a socket asynchronously with `read` and `epoll`

關於epoll我有些想念的地方

在Win32中,如果某個套接字在某個IOCP下注冊,並且沒有可供該套接字讀取的數據,則使用具有某些重疊結構的ReadFile發出異步讀取操作將返回false ,錯誤代碼為WSA_IO_PENDING

如果可用數據,則IOCP會取出相關的overlapped ,給ReadFile的緩沖區包含新讀取的數據,您可以從那里繼續。

當涉及到Linux和epoll時,我不明白。 如果您在某個epoll對象下注冊了一個套接字並且沒有可用數據,則read只會返回-1errnoEWOULDBLOCKEAGAIN 我還了解監視EPOLLIN是半幫助的,因為EPOLLIN談論能夠從套接字讀取,而不是要讀取的實際現有數據。

怎么能告訴套接字“嘿,我希望將X字節或更少的數據寫入此緩沖區,如果您現在沒有數據,可以了-在您這樣做時將其交給我。當數據到達時通知我存儲在緩沖區中?

epoll對象是否可能與IOCP一樣?

沒有API會在X數據可用或緩沖區讀取為您時通知您。 任何非零數據量可用時,有一些API會解除阻止 這些API之一是epoll_wait 您將需要自己在緩沖區中讀取和收集X數據。

沒有Linux套接字API可以滿足您的要求-即在套接字可用時執行操作。 您將始終必須在代碼中顯式執行read

最好的辦法是使非阻塞IO具有poll多路復用,或者使阻塞IO每個套接字具有一個線程。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM