【发布时间】:2011-02-10 03:56:53
【问题描述】:
我正在为 Mac OS X 编写一个分为两部分的应用程序 - 一个守护进程和一个代理。我正在使用标准的 unix 套接字在守护进程和代理之间进行通信。也就是说,套接字是用PF_UNIX 和SOCK_STREAM 创建的。
创建代理时(每当用户登录时),它所做的第一件事就是连接到套接字。这似乎对第一个代理非常有效。但是,当第二个代理连接时,守护程序会遇到以下问题:
我正在使用select() 来检查可以读取的数据。 select()调用成功,表示有数据要读取。但是,当我调用recv() 时,它返回-1,并且errno 设置为35,或"Resource temporarily unavailable".
现在,我希望这是一个非阻塞套接字,但我已经三重检查 - 我从未将套接字设置为非阻塞。
据我所知,这只发生在第二个代理连接到同一个 unix 套接字时。如果我将自己限制为一个守护进程和一个代理,那么一切似乎都运行良好。是什么导致了这种奇怪的行为?
【问题讨论】:
标签: c++ macos unix sockets ipc