Unix Domain Socket ведет себя странно, вызов connect успешно выполняется, когда прослушивание не включено - PullRequest
0 голосов
/ 12 июня 2019

Я использую доменные сокеты Unix для IPC между двумя процессами в приложении Mac OS X. Демон, работающий как сервер и клиентское приложение.

Я ограничил соединение сокетов домена unix только одним соединением. слушай (sock_fd, 1);

После этого я вызываю цикл и вызываю accept (), пока не получу клиента и не закончу цикл.

Теперь моя проблема в том, что когда я подключаю один клиент, он работает отлично. Тем не менее, я заметил, что, если я запускаю клиентский процесс несколько раз, кажется, что все они соединяются просто отлично, используя функцию connect ().

Я не понимаю, как это возможно, так как вся документация, которую я до сих пор читал, указывает на тот факт, что, если вы не принимаете (), то соединение должно завершиться неудачей.

Я также заметил, что иногда мой сервер принимает соединение от клиента, но когда клиент отправляет некоторые данные, сервер не может что-либо поднять. Это можно исправить только после перезапуска сервера. Связаны ли эти два вопроса выше? Любое объяснение будет полезно ..

Я использую библиотеку https://github.com/coffellas-cto/GDUnixSocket для цели C.

Перезапуск сервера, кажется, решает проблему, но как узнать, когда перезапустить сервер? Как узнать, если клиент не может отправить некоторые данные. Насколько я знаю, метод Client () клиента успешно выполняется. Но сервер не может получить какие-либо данные.

Я ожидаю, что любые сообщения от клиента должны быть переданы на сервер. Описанная выше проблема возникает не всегда, а очень редко, что очень затрудняет ее отладку.

Может ли это быть связано с висящей розеткой? Lsof -U помогает в отладке? Любая помощь будет оценена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...