Size: a a a

2020 August 31

b

basiliscos in Modern::Perl
  ((struct sockaddr_in *)addr)->sin_port = htons(port);

здесь подготовка твоего (локального/серверного) SA, а не клиентского (peer).
источник

DE

Denis Erygin in Modern::Perl
понятно что надо пересоздавать с новым адресом и биндить
источник

b

basiliscos in Modern::Perl
да
источник

b

basiliscos in Modern::Perl
но если тебе по протоколу пришёл новый порт удалённой стороны, то даже биндить не надо.
источник

b

basiliscos in Modern::Perl
просто на него шлёшь и всё (можно с того же сокета, а можно и с нового)
источник

DE

Denis Erygin in Modern::Perl
если бы send умел на другой порт слать то да sock->send
источник

VG

Vadim Goncharov in Modern::Perl
спека протокола есть где-то?
источник

DE

Denis Erygin in Modern::Perl
Vadim Goncharov
спека протокола есть где-то?
источник

DE

Denis Erygin in Modern::Perl
C udp должно быть все просто, клиенту выдается временный порт, на который приходят ответы сервера, когда сервер меняет порт и отправляет пакет клиенту с нового порта - то клиент должен его принять без пересоздания. Но вот почему-то так не работает в IO::Socket -он похоже фильтрует по адресу дополнительно.
источник

VG

Vadim Goncharov in Modern::Perl
Client sends a Connect message,
 with game name QUAKE.
Server sends an Accept message,
 containing the identifier of a PERSONAL UDP PORT for the client.
       Client now expects server message coming from the PERSONAL UDP PORT
источник

VG

Vadim Goncharov in Modern::Perl
написано же, from
источник

DE

Denis Erygin in Modern::Perl
Vadim Goncharov
написано же, from
ну так и есть
источник

VG

Vadim Goncharov in Modern::Perl
и ничего локально перебинживать не нужно, оказывается
источник

VG

Vadim Goncharov in Modern::Perl
зачем было нам голову морочить?
источник

DE

Denis Erygin in Modern::Perl
выше читай - IO::Socket так не дает делать
источник

VG

Vadim Goncharov in Modern::Perl
так не используй его, если не дает
        while ($count && select($rout = $rin, undef, undef, 10.0)) {
           $rtime = "";
           $hispaddr = recv(SOCKET, $rtime, 4, 0)    || die "recv: $!";
           ($port, $hisiaddr) = sockaddr_in($hispaddr);

практически штатных средств достаточно
источник

DE

Denis Erygin in Modern::Perl
ну это я и назвал костылем :)
источник

VG

Vadim Goncharov in Modern::Perl
да почему костылем, если обертка неполноценная?
источник

VG

Vadim Goncharov in Modern::Perl
ну возьми AnyEvent::Socket
источник

DE

Denis Erygin in Modern::Perl
Vadim Goncharov
да почему костылем, если обертка неполноценная?
странно что такую фичу недоделали
источник