2012-08-16 115 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