-
- Порт на стороне клиента по-умолчанию выбирается рандомно первый свободный. Но какой-то погромист захардкодил видимо фиксированный. Разные подсети не обязательно, можно просто разные адреса в одной подсети. - fk0(02.10.2018 00:12, ссылка)
- Если не разделять IP по подсетям, то как тогда "объяснять" хост-процессу, через какой из IP нужно выходить на конкретное устройство? - Nikolay_Po(02.10.2018 00:29)
- Вообще по-моему объяснить можно через route add -host device-1 dev eth0:0 и route add -host device-2 dev eth0:1... но не уверен. - fk0(02.10.2018 00:44)
- Да, через маршруты должно получиться. Не подумал. - Nikolay_Po(02.10.2018 01:19)
- Ну если разделять по подсетям, то и другой прибор нужно в другую подсеть унести... Объяснять можно путём фиксации адреса в момент открытия сокета (bind(2) вызвать после socket(2)). Как-то так, как ниже показано. Компилировать через gcc file.c fk0(2281 знак., 02.10.2018 00:43)
- Вообще по-моему объяснить можно через route add -host device-1 dev eth0:0 и route add -host device-2 dev eth0:1... но не уверен. - fk0(02.10.2018 00:44)
- Если не разделять IP по подсетям, то как тогда "объяснять" хост-процессу, через какой из IP нужно выходить на конкретное устройство? - Nikolay_Po(02.10.2018 00:29)
- Порт захватывает монопольно. Как вариант наделать много IP-адресов (алиасов) для сетевой карты и каждому прибору свой порт на своём адресе. Скорей где-то номера портов "гвоздями прибиты", говнокод короче. Причём здесь RT вообще? По-моему "по fk0(11 знак., 02.10.2018 00:09)
- Фиг знает, может RT и не является причиной. Но знаю не "по наслышке", что один из девайсов работает в RT, по UDP в него каждую 1мсек валятся данные. Argon(539 знак., 02.10.2018 06:54)
- Возьми бумажку, нарисуй на ней каждый комп и как они соеденены между собой (включая коммутаторы, USB2serial донглы и т.п.) Подпиши ип-адреса на интерфейсах. Напиши какие программы и с какими аргументами запущены на каждом компе. Отдельно приведи fk0(195 знак., 02.10.2018 11:04)
- В UDP не бывает понятия "ответ". И зачем вам монопольно владеть линком, я искренне не понимаю - lloyd(02.10.2018 10:09)
- Там есть понятие порт, и когда он запускает две программы они, видимо, биндятся на один порт на одном интерфейсе, что невозможно (без SO_REUSEADDR, но тогда и принимать ответ будет первый кто попало). - fk0(02.10.2018 11:05)
- мне? - Argon(02.10.2018 10:10)
- <s>Если нужно вести обмен с двумя абонентами по UDP, просто создается два сокета (если сильно надо, то SO_REUSEADDR). ОС будет выталкивать и принимать пакеты до тех пор, пока есть куда. Если у вас кончились буфферы или пропускная способность lloyd(223 знак., 02.10.2018 10:15 - 10:21)
- Да это не мои изделия. RT однозначно требуется для одного из них, нет смысла рассуждать поможет оно/не поможет. Argon(345 знак., 02.10.2018 10:36 - 10:38)
- Расшифровать с помощью strace. - fk0(02.10.2018 11:05)
- Если у устройств жёстко зашиты одинаковые порты, на которые отправляется пакет от устройства к хосту, то нет возможности на стороне хоста разделить трафик между двумя приложениями, чтобы каждое работало со своим устройством. Первое из приложений, Nikolay_Po(81 знак., 02.10.2018 10:21)
- К счастью, порты не жестко зашиты и они разные, как и адреса в подсети. Вообще разнес их в разные подсети (2 адреса у сетевухи), по отдельности работают, вместе - нет. - Argon(02.10.2018 10:49)
- Так а где socat запускается? На одном из устройств или на том компе где не работает??? Ещё можно tcpdump'ом траффик подсмотреть, но если там каждую миллисекунду, то лучше wireshark'ом. И подумать чем отличается в первом и втором случае (когда fk0(68 знак., 02.10.2018 11:07)
- socat да, на компе запускается... Спасибо за советы, попробую переварить. - Argon(02.10.2018 11:16)
- Так а где socat запускается? На одном из устройств или на том компе где не работает??? Ещё можно tcpdump'ом траффик подсмотреть, но если там каждую миллисекунду, то лучше wireshark'ом. И подумать чем отличается в первом и втором случае (когда fk0(68 знак., 02.10.2018 11:07)
- К счастью, порты не жестко зашиты и они разные, как и адреса в подсети. Вообще разнес их в разные подсети (2 адреса у сетевухи), по отдельности работают, вместе - нет. - Argon(02.10.2018 10:49)
- Да это не мои изделия. RT однозначно требуется для одного из них, нет смысла рассуждать поможет оно/не поможет. Argon(345 знак., 02.10.2018 10:36 - 10:38)
- <s>Если нужно вести обмен с двумя абонентами по UDP, просто создается два сокета (если сильно надо, то SO_REUSEADDR). ОС будет выталкивать и принимать пакеты до тех пор, пока есть куда. Если у вас кончились буфферы или пропускная способность lloyd(223 знак., 02.10.2018 10:15 - 10:21)
- Фиг знает, может RT и не является причиной. Но знаю не "по наслышке", что один из девайсов работает в RT, по UDP в него каждую 1мсек валятся данные. Argon(539 знак., 02.10.2018 06:54)
- Устройства должны общаться между собой? Или без разницы? Пропишите на компе две разных подсети IP. Тогда у компьютера будет два разных IP. Устройствам дайте IP из этих разных сетей. Nikolay_Po(1918 знак., 01.10.2018 23:08 - 23:16)
- Порт на стороне клиента по-умолчанию выбирается рандомно первый свободный. Но какой-то погромист захардкодил видимо фиксированный. Разные подсети не обязательно, можно просто разные адреса в одной подсети. - fk0(02.10.2018 00:12, ссылка)