Я понял это сейчас. Проблема была в том, что libQt5Core.so.5 был собран с тегом .note.ABI, версия которого несовместима с тем, что WSL идентифицирует как (4.4), но контейнер докера был совместим (4.9) .
Аналогично тому, что происходит здесь: https://github.com/Microsoft/WSL/issues/3023
Пятый аргумент может быть брошен к struct sockaddr_in
, и там sin_port
число удаленного порта.
Порт отправителя UDP был бы переходным. Я не думаю, что Вы могли использовать это для чего-либо кроме для создания отчетов.
recvfrom (носок, buf, PKTSZ, 0, &client, len);
Адрес сокета отправителей хранится в клиентской переменной Вашего кода. Получить доступ к использованию порта отправителей sockaddr_in вместо sockaddr. Пример:
sockaddr_in client;
int len = sizeof(client);
recvfrom(sock, buf, PKTSZ, 0, (struct sockaddr *)&client, (socklen_t *)&len);
int port = ntohs(client.sin_port);
Ссылки: руководство Beej по сетевому программированию и MSDN
recvfrom (), как предполагается, возвращает это Вам в пятом аргументе (структура sockaddr*).
Править: Используйте что-то вроде этого
struct sockaddr_in client;
recvfrom(... (struct sockaddr*)&client ...);
client.sin_port
должен быть порт отправителя.