Size: a a a

2020 August 31

DE

Denis Erygin in Modern::Perl
Вот рабочий код:
источник

DE

Denis Erygin in Modern::Perl
strace -f -e trace=network perl uc2.pl
socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP) = 3
sendto(3, "Hello!", 6, 0, {sa_family=AF_INET, sin_port=htons(26000), sin_addr=inet_addr("127.0.0.1")}, 16) = 6
Try recv
recvfrom(3, "Hello from server", 8192, 0, {sa_family=AF_INET, sin_port=htons(26001), sin_addr=inet_addr("127.0.0.1")}, [4096->16]) = 17
:26001
Hello from server
источник

b

basiliscos in Modern::Perl
Denis Erygin
IO::Socket делает connect
ну вот и ответ. Кури доку по I:S почему он так делает, и что делать чтобы он так не делал )
источник

DE

Denis Erygin in Modern::Perl
basiliscos
ну вот и ответ. Кури доку по I:S почему он так делает, и что делать чтобы он так не делал )
ну вот так бы сразу ;)
источник

b

basiliscos in Modern::Perl
подозреваю что в контсрукторе не надо указывать конечный хост/порт
источник

DE

Denis Erygin in Modern::Perl
basiliscos
ну вот и ответ. Кури доку по I:S почему он так делает, и что делать чтобы он так не делал )
походу после connect можно вызвать sendto без адреса - типа упростили
источник

b

basiliscos in Modern::Perl
да, но это не то, что тебе надо
источник

b

basiliscos in Modern::Perl
с других адресов не получишь
источник

DE

Denis Erygin in Modern::Perl
basiliscos
да, но это не то, что тебе надо
ну это обьясняет интерфейс send без параметров адреса
источник

DE

Denis Erygin in Modern::Perl
анонимный сокет нужно создать   $sock = IO::Socket::INET->new(Proto => 'udp') и вызвать send($sock, $MSG, 0, $portaddr) Хотя в доке написаны примеры только с Peer
источник

SZ

Sergey Zhmylove in Modern::Perl
Denis Erygin
тесты простые и так
Там кривой, по твоим словам, код (который, как ты говоришь, не работает).
Дашь диаграммы -- напишу код.

А если тебе нужно ткнуть, как оно это делает: вот:
В этой строке написано, почему «анонимный» сокет работает.
https://metacpan.org/source/TODDR/IO-1.42/lib/IO/Socket/INET.pm#L221
источник

DE

Denis Erygin in Modern::Perl
теперь и я могу connect загрепать по сырцам ;)
источник

DE

Denis Erygin in Modern::Perl
видимо IO::Socket::INET писали для tcp, потом сбоку приделали/подогнали udp
источник

SZ

Sergey Zhmylove in Modern::Perl
Denis Erygin
теперь и я могу connect загрепать по сырцам ;)
Причем тут коннект?
last unless($type == SOCK_STREAM || defined $raddr);
источник

SZ

Sergey Zhmylove in Modern::Perl
У тебя type = sock_dgram, но raddr задан, когда есть peeraddr
источник

DE

Denis Erygin in Modern::Perl
зная что там connect используется это можно найти
источник

SZ

Sergey Zhmylove in Modern::Perl
Denis Erygin
зная что там connect используется это можно найти
Пфф, ты шутишь?
источник

SZ

Sergey Zhmylove in Modern::Perl
return $sock->SUPER::connect
источник

SZ

Sergey Zhmylove in Modern::Perl
Там этих коннектов миллион
источник

SZ

Sergey Zhmylove in Modern::Perl
В io::handle в т.ч
источник