我正在编写一个Mac OS X应用程序,分为两个部分:守护进程和代理。我使用标准的Unix套接字在守护进程和代理之间进行通信。也就是说,套接字是使用
当代理被创建时(每当用户登录时),它首先要做的事情之一就是连接到套接字。对于第一个代理,这似乎完美地运行。然而,当第二个代理连接时,守护进程会遇到以下问题:
我使用
现在,如果是非阻塞套接字,我会预计这种情况,但是我已经三次检查过了 - 我从未将套接字设置为非阻塞。
据我所知,只有当第二个代理连接到同一个Unix套接字时才会发生这种奇怪的行为。如果我限制自己只使用一个守护进程和一个代理,那么一切似乎都完美无缺。是什么导致了这种奇怪的行为呢?
PF_UNIX
和SOCK_STREAM
创建的。当代理被创建时(每当用户登录时),它首先要做的事情之一就是连接到套接字。对于第一个代理,这似乎完美地运行。然而,当第二个代理连接时,守护进程会遇到以下问题:
我使用
select()
检查可以读取的数据。 select()
调用成功,并指示有数据可供读取。但是,当我调用recv()
时,它返回-1
,并且errno
设置为35
或"Resource temporarily unavailable"
。现在,如果是非阻塞套接字,我会预计这种情况,但是我已经三次检查过了 - 我从未将套接字设置为非阻塞。
据我所知,只有当第二个代理连接到同一个Unix套接字时才会发生这种奇怪的行为。如果我限制自己只使用一个守护进程和一个代理,那么一切似乎都完美无缺。是什么导致了这种奇怪的行为呢?