2012-08-16 90 views
1

我有一個程序使用select()來輪詢一個套接字準備好連接。問題select()語句

我有另一個程序綁定到套接字併發出send()命令。

我有的問題是如果文件描述符跨兩個可執行文件那樣工作。

即,如果我將程序A中的文件描述符5添加到FD_SET,並且我的程序B中的套接字fd是5,這是否意味着該套接字上的send()將喚醒程序A, FD_SET包含5?

謝謝

回答

0

它與文件描述符號碼無關。

如果您通過套接字通過連接的另一端爲選定的套接字進行讀取,則選擇器將檢測讀取事件。

+0

啊 - 好的。我的印象是,select語句所處理的描述符集在所有進程中都是靜態的。我會仔細檢查我的套接字是否在兩側都是相同的。 – Derek 2012-08-17 02:27:23

+0

@Derek這種印象甚至沒有意義。 FD是本地進程。 – EJP 2012-08-21 05:22:34

2

不,文件描述符號碼是特定於進程的。在不同過程中使用相同的fd編號沒有隱含的影響。

0

給定進程(0-1023)支持大部分1024個描述符(文件/套接字)(請參閱/ proc //限制中進程支持的文件/套接字描述符的最大限制)。

將前3個描述符(0,1和2)分別分配給stdin,stdout和stderr。下一個 描述符的值爲3將被分配給下一個打開的文件/套接字描述符,並且可以一直到/ proc中指定的限制。注意:您也可以更改支持的最大描述符。

您可以在/ proc // fd中看到給定進程打開的文件描述符列表。 每個進程描述符/信號/事件範圍僅限於進程。

+0

謝謝 - 我的下一個問題是要了解如何找出哪個fd的進程已經打開,因爲我似乎遇到了一個問題,processA無限期地監聽套接字以做好準備,永遠不會讓它出現 – Derek 2012-08-17 12:38:50

+0

爲了更容易的調試,除了手動遍歷'/ proc/fd',你還可以嘗試'lsof'。 – 2012-08-17 18:22:55