![](/img/trans.png)
[英]How to set Socket File Descriptor with FD_SET Unix in C / C++
[英]C/C++ Add socket to fd_set when select is pending
我正在使用Berkeley套接字在Windows / unix多線程服務器應用程序網絡層上工作,偶然發現了一個問題:
可能的解決方案是將超時添加到選擇中。 我已經看到在某些網站上使用select(距今15年)進行網絡連接。
問題是:
還有其他解決方案嗎? 等待超時仍然會導致某種程度的飢餓,並從選擇等待者線程中占用CPU時間。 我認為可以重新設計應用程序,但是添加套接字也可以從選擇等待者線程不知道(並且絕對應該不知道)的線程中完成,因此無法避免這種情況。
如果沒有,應該選擇哪種超時來達到最佳性能/服務質量?
另請注意,我的確意識到使用更高級的API(iocp,kqueue,...)或可以為我完成任務的lib是一個更好的主意,但在給定的時間點上,這不是我的選擇。
謝謝
創建一個額外的套接字對,並將其中一個套接字添加到每個select
。 要中斷正在運行的select
,請通過另一個套接字向其發送消息。
僅在Unix方面,可以使用pthread_kill
將任何信號(例如SIGUSR1
)發送到等待的線程。 select
with,然后返回一個負值,並將errno
設置為EINTR
。 但是在Windows方面沒有類似的東西。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.