Я бы хотел использовать сокат как реле, позволяющее двум игрокам (оба за брандмауэрами) моей игры подключаться друг к другу. Движок игры использует UDP. Игрок A будет размещать игровой сервер, игрок B присоединится как клиент, публичный сервер C будет просто действовать как ретранслятор для трафика.
В настоящее время я пытаюсь настроить тестовый сценарий на своем локальном компьютере. Аналогичный тестовый пример с TCP работал нормально, но я застрял на случае UDP.
sudo nc -ul ::1 1234
socat -d -d UDP6-LISTEN:33000 UDP6-LISTEN:22000
socat -d -d UDP6:ip6-localhost:33000 UDP6:ip6-localhost:1234
nc -uvvv ::1 22000
Кажется, что C никогда не начинает прослушивать 22000 (с TCP это произошло, как только A подключит эхо-сервер к реле). И поэтому B не может подключиться к 22000.
Выход C:
$ socat -d -d UDP6-LISTEN:33000,bind=ip6-localhost UDP6-LISTEN:22000,bind=ip6-localhost
2019/06/02 15:42:49 socat[15422] N listening on UDP AF=10 [0000:0000:0000:0000:0000:0000:0000:0001]:33000
Выход A:
$ socat -d -d UDP6:ip6-localhost:33000 UDP6:ip6-localhost:1234
2019/06/02 15:43:05 socat[15436] N opening connection to AF=10 [0000:0000:0000:0000:0000:0000:0000:0001]:33000
2019/06/02 15:43:05 socat[15436] N successfully connected from local address AF=10 [0000:0000:0000:0000:0000:0000:0000:0001]:34270
2019/06/02 15:43:05 socat[15436] N opening connection to AF=10 [0000:0000:0000:0000:0000:0000:0000:0001]:1234
2019/06/02 15:43:05 socat[15436] N successfully connected from local address AF=10 [0000:0000:0000:0000:0000:0000:0000:0001]:47053
2019/06/02 15:43:05 socat[15436] N starting data transfer loop with FDs [5,5] and [6,6]
B на самом деле не производит никакого вывода:
$ nc -uvvv ip6-localhost 22000
$
Я уверен, что совершаю очень серьезную ошибку. Заранее благодарим за любую информацию, которую вы можете предоставить.