Xpoint
   [напомнить пароль]

IO::Socket - как отправить UDP с определенного порта?

Метки: [без меток]
2009-05-03 11:09:27 [обр] Артемий[досье]

Здравствуйте. Перерыл вроде все по Socket, нигде не нашел как зарядить его на отправку UDP с конкретного порта, а не с того, который система ему выдала. Это возможно?

use IO::Socket;
$port_dest = 40000;
$addr_dest = '10.0.0.25';

socket(UDP, PF_INET, SOCK_DGRAM, getprotobyname('udp')) or die "socket() failed: $@";

 $dest = sockaddr_in($port_dest,inet_aton($addr_dest));
 $buff = undef;

send(UDP, "\x32\x00\x00\x00\x04\x00\x00\x00\x6D\x61\x69\x6E\x02\x00\x00\x00\x3A\x29", 0, $dest) or die

спустя 1 час 44 минуты [обр] Артемий[досье]
Точнее задача отправить ответ с того же порта, на который поступил запрос, на тот порт удаленной машины, с которого он пришел
спустя 52 минуты [обр] Дмитрий Кучкин(36/236)[досье]
Надо использовать bind
Пример есть в perldoc perlipc (UDP: Message Passing)
use Sys::Hostname;

...

$port_local = 40000;
$addr_local = gethostbyname(hostname());

bind(UDP,sockaddr_in($port_local, $addr_local)) || die "bind: $!";

...
Powered by POEM™ Engine Copyright © 2002-2005