-
- Кстати, а что нужно-то? Как-то я забыл сразу это спросить. Ведь если тупо обмениваться данными, можно SHM завести… Я так локальным клиентам раздаю свежесобранные изображения с ПЗС/КМОП светоприемников. Eddy_Em(136 знак., 12.04.2024 19:15)
- Самый полезный и надёжный юниксный сокет - это датаграмный сокет в
абстрактном namespace. Samx(153 знак., 11.04.2024 22:01)
- Опять та же ситуация: про всё это читал, попадалось, но с какими
опциями что вызывать - даже примерно не представляю. - Dingo(12.04.2024 19:03)
- Всё должно быть ясно по смыслу. Давай закрепим: RxTx(1186 знак., 12.04.2024 22:43 - 22:50, ссылка)
- И всё же пока непонятно, как это скрестить с poll() . Достаточно ли
дескриптор сокета поместить в список ожидания? Какого события ждать
- доступности на чтение? Beej пишет, что listen() нужен, но как
понимаю в контексте "один сервер - много клиентов". SOCK_STREAM -
тогда в потоки с listen(), а для работы без listen() какой дефайн
использовать? Конечно, попробую, протестирую, но если знаете ответ
- буду рад подсказкам. - Dingo(13.04.2024 08:58)
- Я человек простой, использую select() с таймаутом: Samx(1225 знак., 15.04.2024 19:50)
- Спасибо, развёрнутый ответ! Отдельное за отсылки к учебникам. - Dingo(13.04.2024 08:36)
- Спасибо! чётко! пригодится - bnb62(13.04.2024 07:12)
- Что такое select(), poll(), epoll() - у сокета можно установить флаг асинхронной неблокирующей работы. Тогда надо будет вычитывать события из массивов сокетов, чем эти функции и занимаются. select() очень старая и и спользуется только для демо-примеров, poll(), epoll() или libevent современный способ работы. Подробно о различии между ними и код в переводе RxTx(1 знак., 12.04.2024 22:46, ссылка)
- И всё же пока непонятно, как это скрестить с poll() . Достаточно ли
дескриптор сокета поместить в список ожидания? Какого события ждать
- доступности на чтение? Beej пишет, что listen() нужен, но как
понимаю в контексте "один сервер - много клиентов". SOCK_STREAM -
тогда в потоки с listen(), а для работы без listen() какой дефайн
использовать? Конечно, попробую, протестирую, но если знаете ответ
- буду рад подсказкам. - Dingo(13.04.2024 08:58)
- Всё должно быть ясно по смыслу. Давай закрепим: RxTx(1186 знак., 12.04.2024 22:43 - 22:50, ссылка)
- Опять та же ситуация: про всё это читал, попадалось, но с какими
опциями что вызывать - даже примерно не представляю. - Dingo(12.04.2024 19:03)
- Ещё вопрос: вызовы socket(), bind(), connect(), accept(), close()
пощупал. Можно как-то сделать чтобы accept() был неблокирующим?
Например, с использованием select() или poll() объединить с другими
событиями. Или обойтись без него? Ну и чтобы два раза не вставать:
обработчик сигнала куда отдаёт управление - где были или продолжает
выполнение? В случае, если мы ждём на select(), мы вернёмся в
ожидание или продолжим выполнять программу? - Dingo(11.04.2024 10:23)
- Можно. У сокета выставляется признак неблокирующего. Далее: применяем select/poll/epoll возникает событие что произошел accept и он обрабатывается, создается транспортный сокет. По ссылкам внизу примеры кода. RxTx(173 знак., 11.04.2024 11:43, ссылка, ссылка)
- Я примерчик выше приводил. Там как раз неблокирующий. Eddy_Em(185 знак., 11.04.2024 11:37)
- SO_REUSE для локальных PF_LOCAL не применим? у меня setsockopt()
возвращает -1 - Dingo(12.04.2024 12:25)
- REUSE для UNIX-сокета? Это как? - Eddy_Em(12.04.2024 12:44)
- Пояснения: под Linux/Unix не программировал, только раз с
применением QT4.xx, а тут надо прослойку сделать. Вижу кучу опций,
но при этом не знаю, какие когда применимы, и чтение документации
не помогает с просветлением. Dingo(157 знак., 12.04.2024 13:02)
- Я применяю SO_REUSEADDR для UDP броадкаст сокетов. Реюз адресов и портов требуется для UDP сокетов (AF_INET). Каким образом ты собрался "реюзать" сокеты которые представляют собой обертку над межпроцессоными пайпами? И какие у них "адреса" и "порты"? По смыслу? Хотя.... если это memory-mapped файл то как раз, я думаю это можно устроить.. - RxTx(12.04.2024 22:30)
- Хочу через Unix сокет гонять данные, но не замерзать на accept() -
будет ещё одно соединение и сигналы. Как это лучше сделать? Пока
что пытаюсь по книжкам: socket(), bind(), listen(), accept(),
close(). Но accept() блокирующий вызов, напрашивается poll(). Как
это лучше сделать? setsockopt() если нужен(или нет?), между какими
вызовами его ставить? А poll() выдаёт в вызове того, что я
нагородил POLLHUP o_O - Dingo(12.04.2024 12:57)
- У тебя локальные сокеты, представляющие собой обертку над
межпроцессными коммуникациями? Если да, accept() там неприменим.
accept() служит для приема TCP соединений у слушающего на порту TCP
сокета. - RxTx(12.04.2024 15:41)
- Да, это про межпроцессорное общение. А listen() применим? Можно ли
через один сокет и читать, и писать? Или надо второй создавать? Или
достаточно socket(), bind() и можно recv(), send()? (read(),
write()) - Dingo(12.04.2024 18:59)
- listen() используется только для создания прослушивающего сокета
для TCP, затем либо у этого сокета произойдет событие ACCEPT или же
блокирующий вызов accept() вернет сокет установившегося соединения.
Для UDP сокетов или для сокетов служащих оберткой над файлами и
пайпами listen() не требуется. Т.е. как ты и пишешь, достаточно
socket() потом связать его с именем файла/ipaddress/итд вызовом
bind(), а потом send()/recv(). - RxTx(12.04.2024 22:29)
- В большинстве случаев будет работать write/read, а send/recv нужны лишь для специфических случаев, когда требуются энти самые флаги. Eddy_Em(106 знак., 12.04.2024 22:37)
- listen() используется только для создания прослушивающего сокета
для TCP, затем либо у этого сокета произойдет событие ACCEPT или же
блокирующий вызов accept() вернет сокет установившегося соединения.
Для UDP сокетов или для сокетов служащих оберткой над файлами и
пайпами listen() не требуется. Т.е. как ты и пишешь, достаточно
socket() потом связать его с именем файла/ipaddress/итд вызовом
bind(), а потом send()/recv(). - RxTx(12.04.2024 22:29)
- Да, это про межпроцессорное общение. А listen() применим? Можно ли
через один сокет и читать, и писать? Или надо второй создавать? Или
достаточно socket(), bind() и можно recv(), send()? (read(),
write()) - Dingo(12.04.2024 18:59)
- Просто неблокирующий сделать и поллить. Пример я привел. - Eddy_Em(12.04.2024 13:37)
- Какой из файлов смотреть? Пока что я знаю слишком малую часть ответа, чтобы сформулировать вопрос. - Dingo(12.04.2024 19:01)
- У тебя локальные сокеты, представляющие собой обертку над
межпроцессными коммуникациями? Если да, accept() там неприменим.
accept() служит для приема TCP соединений у слушающего на порту TCP
сокета. - RxTx(12.04.2024 15:41)
- Пояснения: под Linux/Unix не программировал, только раз с
применением QT4.xx, а тут надо прослойку сделать. Вижу кучу опций,
но при этом не знаю, какие когда применимы, и чтение документации
не помогает с просветлением. Dingo(157 знак., 12.04.2024 13:02)
- REUSE для UNIX-сокета? Это как? - Eddy_Em(12.04.2024 12:44)
- Интересненько как: Eddy_Em(278 знак., 11.04.2024 11:57, ссылка)
- fcntl() и флаг O_NONBLOCK стандартизованы POSIX, их и надо
тилибонькать. Маздайка юзает ioctlsocket( ... FIONBIO ...) - RxTx(11.04.2024 15:51)
- А вот ни хрена у меня fcntl не делал сокет неблокирующим, когда я вышеупомянутый сниппет писал N лет назад. Eddy_Em(92 знак., 11.04.2024 15:54)
- fcntl() и флаг O_NONBLOCK стандартизованы POSIX, их и надо
тилибонькать. Маздайка юзает ioctlsocket( ... FIONBIO ...) - RxTx(11.04.2024 15:51)
- SO_REUSE для локальных PF_LOCAL не применим? у меня setsockopt()
возвращает -1 - Dingo(12.04.2024 12:25)
- Если эти символы "локальный сокет AF_UNIX" Tyмблep(95 знак., 10.04.2024 15:09, ссылка)
- Тоже полезно; был невнимателен, хоть и попадалось при поиске. - Dingo(11.04.2024 10:15)
- Так оно "из коробки" есть: man 7 unix. - Eddy_Em(11.04.2024 11:35)
- Тоже полезно; был невнимателен, хоть и попадалось при поиске. - Dingo(11.04.2024 10:15)
- Ежли Pipe или FIFO под сокетом, то однонаправленный. Ежли UDP/TCP, то фуллдуплекс. Скури socketpair() из UNIX ipc_guide - RxTx(10.04.2024 12:58)
- Конечно, с чего бы ему однонаправленным быть? Такой же, как
AF_INET, только через ядро, что шустрей. Eddy_Em(45 знак., 10.04.2024 12:52, ссылка)
- Пёстёж, впрочем, как и всегда :) - RxTx(10.04.2024 13:01)
- Да мне пох. - Eddy_Em(10.04.2024 13:03)
- Спасибо. - Dingo(10.04.2024 12:57)
- Пёстёж, впрочем, как и всегда :) - RxTx(10.04.2024 13:01)