Комментарии 8
Как не обычно! Никто до этого раньше не додумался!
Почему из recv возврат не проверяется? Сокет-то неблокирующий. А ну он -1 вернёт и -EGAIN поставит?
Почему из recv возврат не проверяется? Сокет-то неблокирующий. А ну он -1 вернёт и -EGAIN поставит?
Есть косячки по коду — не спорю… но дело не в коде, а в концепции…
Это не косяк, это stack corruption и, возможно, SEGV.
Концепция хорошая, но, конечно-же, не новая. Если правильно помню, postfix так общается между частями.
Концепция хорошая, но, конечно-же, не новая. Если правильно помню, postfix так общается между частями.
Концепция, конечно же не новая… для этого в общем и задумывались локальные сокеты…
просто я не особо много материала нашел по этой теме в инете… значит мало кто этим пользуется… а оказывается это так удобно :)
просто я не особо много материала нашел по этой теме в инете… значит мало кто этим пользуется… а оказывается это так удобно :)
У нас даже в Самаре это было в обязательном курсе программирования.
Посмотрите, я не знаю, mysql что-ли. MySQL по-умолчанию использует unix-socket.
ilen = recv( ns, &lbuf, 255, 0 );
А вот это просто ошибка. Не &lbuf, а lbuf.
Посмотрите, я не знаю, mysql что-ли. MySQL по-умолчанию использует unix-socket.
ilen = recv( ns, &lbuf, 255, 0 );
А вот это просто ошибка. Не &lbuf, а lbuf.
Кстати, я был не прав: новый сокет не является неблокирующим, состояние из ctrlsck не копируется в новый сокет.
Как же легко… узнать стиль автора… в других статьях… на Хабре :)
А вообще — можно не создавать директорию с сокетами заранее, а вызвать socketpair() и форкнуться — в родителе записать первый сокет в массив “клиентов”, а второй использовать из дочернего процесса для связи с родителем. Таким образом, достигается тот же результат, что и в вашем случае, только вообще без надобности использовать ФС и с переносимостью под системы, где нет UNIX-сокетов, а вместо них используются INET-сокеты, например.
А вообще — можно не создавать директорию с сокетами заранее, а вызвать socketpair() и форкнуться — в родителе записать первый сокет в массив “клиентов”, а второй использовать из дочернего процесса для связи с родителем. Таким образом, достигается тот же результат, что и в вашем случае, только вообще без надобности использовать ФС и с переносимостью под системы, где нет UNIX-сокетов, а вместо них используются INET-сокеты, например.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Межпроцессное взаимодействие и Unix Domain Socket