Я использую доменные сокеты Unix для IPC между двумя процессами в приложении Mac OS X.
Демон, работающий как сервер
и клиентское приложение.
Я ограничил соединение сокетов домена unix только одним соединением.
слушай (sock_fd, 1);
После этого я вызываю цикл и вызываю accept (), пока не получу клиента и не закончу цикл.
Теперь моя проблема в том, что когда я подключаю один клиент, он работает отлично. Тем не менее, я заметил, что, если я запускаю клиентский процесс несколько раз, кажется, что все они соединяются просто отлично, используя функцию connect ().
Я не понимаю, как это возможно, так как вся документация, которую я до сих пор читал, указывает на тот факт, что, если вы не принимаете (), то соединение должно завершиться неудачей.
Я также заметил, что иногда мой сервер принимает соединение от клиента, но когда клиент отправляет некоторые данные, сервер не может что-либо поднять. Это можно исправить только после перезапуска сервера. Связаны ли эти два вопроса выше? Любое объяснение будет полезно ..
Я использую библиотеку https://github.com/coffellas-cto/GDUnixSocket
для цели C.
Перезапуск сервера, кажется, решает проблему, но как узнать, когда перезапустить сервер? Как узнать, если клиент не может отправить некоторые данные. Насколько я знаю, метод Client () клиента успешно выполняется. Но сервер не может получить какие-либо данные.
Я ожидаю, что любые сообщения от клиента должны быть переданы на сервер. Описанная выше проблема возникает не всегда, а очень редко, что очень затрудняет ее отладку.
Может ли это быть связано с висящей розеткой? Lsof -U помогает в отладке?
Любая помощь будет оценена.