我在Mac OS X应用程序中的2个进程之间使用Unix域套接字进行IPC。 守护程序,充当服务器 和一个客户端应用。
我仅将unix域套接字连接限制为一个连接。 listen(sock_fd,1);
然后,我调用一个循环,并调用accept()直到获得一个客户端并结束循环。
现在,我的问题是,当我连接单个客户端时,它的工作原理非常好。但是,我注意到如果我多次运行客户端进程,使用connect()函数,它们似乎都可以正常连接。
我不知道这是怎么可能的,因为到目前为止我已经阅读了所有文档,但事实是,如果不使用accept(),则连接将会失败。
我还注意到有时服务器会接受来自客户端的连接,但是当客户端发送一些数据时,服务器将无法接收任何内容。仅通过重新启动服务器才能解决此问题。以上两个问题是否联系在一起?任何解释都会有所帮助。
我正在使用的图书馆是https://github.com/coffellas-cto/GDUnixSocket 用于目标C。
重新启动服务器似乎可以解决问题,但是如何知道何时重新启动服务器?如何知道客户端是否无法发送一些数据。据我所知,Client的write()方法可以成功完成。但是服务器无法提取任何数据。
我希望来自客户端的任何消息都应传递到服务器。我上面描述的问题不会一直出现,它很少发生,这使得调试它非常困难。
与悬挂的插座有关吗? lsof -U有助于调试吗? 任何帮助将不胜感激。