Size: a a a

2020 August 31

SZ

Sergey Zhmylove in Modern::Perl
Который прародитель их
источник

DE

Denis Erygin in Modern::Perl
не важно, к авторам претензий нет, сделали дженерик интерфейс
источник

SZ

Sergey Zhmylove in Modern::Perl
А где оно сохраняет peer адрес в объекте -- тебе тоже уже показали:
https://t.me/modernperl/172010
источник

SZ

Sergey Zhmylove in Modern::Perl
Вот тут описано, как работает recv:
https://perldoc.perl.org/perlipc.html#UDP%3a-Message-Passing
источник

DE

Denis Erygin in Modern::Perl
в итоге причиной всех проблем был скрытый connect в IO::Socket::INET для udp
источник

VG

Vadim Goncharov in Modern::Perl
Denis Erygin
strace -f -e trace=network perl uc.pl
socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP) = 3
connect(3, {sa_family=AF_INET, sin_port=htons(26000), sin_addr=inet_addr("127.0.0.1")}, 16) = 0
getpeername(3, {sa_family=AF_INET, sin_port=htons(26000), sin_addr=inet_addr("127.0.0.1")}, [256->16]) = 0
getpeername(3, {sa_family=AF_INET, sin_port=htons(26000), sin_addr=inet_addr("127.0.0.1")}, [256->16]) = 0
sendto(3, "Hello!", 6, 0, NULL, 0)      = 6
Try recv
логично, ему сказали Peer* в конструкторе, он и делает connect()
источник

VG

Vadim Goncharov in Modern::Perl
Denis Erygin
видимо IO::Socket::INET писали для tcp, потом сбоку приделали/подогнали udp
и об этом, и о connect() сегодня еще днём говорилось
источник

DE

Denis Erygin in Modern::Perl
можно было сделать и без connect внутри
источник

VG

Vadim Goncharov in Modern::Perl
зачем, если ты именно этого захотел, раз  указал Peer* в конструкторе?
источник

DE

Denis Erygin in Modern::Perl
для udp никто не делает connect - это нужно только для tcp
источник

VG

Vadim Goncharov in Modern::Perl
очень даже делают
источник

VG

Vadim Goncharov in Modern::Perl
это и удобнее, и оптимизированнее, когда адрес пира не меняется в работе
источник

DE

Denis Erygin in Modern::Perl
в обьекте и так хранится peer, можно было в sendto подставлять внутри
источник

DE

Denis Erygin in Modern::Perl
Vadim Goncharov
это и удобнее, и оптимизированнее, когда адрес пира не меняется в работе
но вот бывают ситуации когда ждут другого поведения ;)
источник

VG

Vadim Goncharov in Modern::Perl
Denis Erygin
в обьекте и так хранится peer, можно было в sendto подставлять внутри
затем, чтобы не гонять в ядро лишние данные на каждый пакет
источник

VG

Vadim Goncharov in Modern::Perl
Denis Erygin
но вот бывают ситуации когда ждут другого поведения ;)
ждешь другого - скажи ему о другом
источник

DE

Denis Erygin in Modern::Perl
а в доке хоть написали про это? я что-то не нашел
источник

SZ

Sergey Zhmylove in Modern::Perl
Denis Erygin
для udp никто не делает connect - это нужно только для tcp
Делают, это стандартное поведение -- дропать пакеты, не от тех пиров
источник

SZ

Sergey Zhmylove in Modern::Perl
Denis Erygin
в обьекте и так хранится peer, можно было в sendto подставлять внутри
Дело не в sendto, а в recvfrom
источник

VG

Vadim Goncharov in Modern::Perl
Sergey Zhmylove
Делают, это стандартное поведение -- дропать пакеты, не от тех пиров
да, еще одна причина, кстати
источник