[英]More asynchronous socket questions:
這里的最初問題
所以我一直在閱讀異步套接字,還有兩個問題。 主要是具體的。
1:我可以在select()中使用阻塞套接字,而不會造成影響,對嗎?
2:當我使用FD_SET()時,我要附加當前的fd_set *而不更改它,對嗎?
3:使用FD_CLR()時,我可以簡單地傳入要刪除的套接字的套接字ID,對嗎?
4:當我使用FD_CLR()刪除套接字時,是否有一種首選的方法來重置最大文件描述符(nfds)?
5:假設我將所有連接的套接字都放在一個向量中,當select()返回時,我可以通過該向量進行測試,並檢查if (FD_ISSET (theVector[loopNum], &readFileSet))
以查看是否需要讀取任何數據,對嗎? 如果返回true,我可以簡單地使用與同步套接字上相同的接收函數來檢索該數據?
6:如果select()嘗試從封閉的套接字讀取,會發生什么情況? 我知道它返回-1,但是它設置了errno還是有其他方法可以繼續使用select()?
7:你為什么這么厲害? = D
感謝您的寶貴時間,對於您的頭痛,我們深表歉意,希望您能為您提供幫助!
所以我一直在閱讀異步套接字
從接下來發生的事情來看,我認為您沒有。 您似乎已經在閱讀有關非阻塞套接字的信息。 不一樣的東西。
1:我可以在select()中使用阻塞套接字,而不會造成影響,對嗎?
否。考慮偵聽套接字變得可讀的情況,指示即將發生的accept()
,但與此同時客戶端關閉連接。 如果然后調用accept()
,則將阻塞直到下一個傳入連接,從而阻止您為其他套接字提供服務。
2:當我使用FD_SET()時,我要附加當前的fd_set *而不更改它,對嗎?
不,您正在設置。 如果已經設置,則沒有任何變化。
3:使用FD_CLR()時,我可以簡單地傳入要刪除的套接字的套接字ID,對嗎?
正確。
4:當我使用FD_CLR()刪除套接字時,是否有一種重置最大文件描述符(nfds)的首選方法?
不完全是,只需重新掃描並重新計算即可。 但是您實際上並不需要真正重置它。
5:假設我將所有連接的套接字都放在一個向量中,當select()返回時,我可以通過該向量進行測試,並檢查是否(FD_ISSET(theVector [loopNum],&readFileSet))以查看是否需要讀取任何數據,對嗎?
正確,但是通常更簡單地遍歷FD集本身。
如果返回true,我可以簡單地使用與同步套接字上相同的接收函數來檢索該數據?
是的,在您的堵頭插座上。
6:如果select()嘗試從封閉的套接字讀取,會發生什么情況?
select()
不會嘗試從封閉的套接字讀取。 它可能會嘗試在封閉的套接字上進行選擇 ,在這種情況下,它將以errno == EBADF
返回-1,如文檔中所述。
我知道它返回-1,但是它設置了errno還是有其他方法可以繼續使用select()?
往上看。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.