UDP Socket, Alexious, 27-Апр-07, 14:38 [смотреть все]Написал простой сокет для UDP пакетов. Под виндой все отлично работаетuse strict; use IO::Socket; my($sock, $oldmsg, $newmsg, $hisaddr, $hishost, $MAXLEN, $PORTNO); $MAXLEN = 1024; $PORTNO = 137; $sock= IO::Socket::INET->new(LocalPort=>$PORTNO, Proto=>'udp') or die "socket: $@"; while ($sock->recv($newmsg, $MAXLEN)) { print $newmsg; } Пытаюсь запустить по UNIX но получаю ишибку всегда : socket: IO::Socket::INET: Bad protocol 'udp' at UDP_recv2.pl line 9. В чем дело? ----------------------------------- Так же есть сервер use Socket; socket(SockHandle, PF_INET, SOCK_DGRAM, getprotobyname("udp")); $HOSTNAME="tratata"; $ipaddr="175.37.10.50"; $PORTNO="137"; $MSG="HELP-HELP-HELP-HELP"; $ipaddr=inet_aton($HOSTNAME); $portaddr=sockaddr_in($PORTNO, $ipaddr); while (1) { print "Send\n"; send(SockHandle,$MSG,0, $portaddr)==length($MSG)"; sleep 5;} Программа вроде работает по UNIX но ничего не шлет в сеть. Подскажите где ошибки плиз. |
- UDP Socket, NuINu, 16:37 , 27-Апр-07 (1)
>Написал простой сокет для UDP пакетов. Под виндой все отлично работает Не знаю почему у тебя не запускается. Может ты модуль не правильно установил? IO::Socket ? У меня работает, только вывод не печатает, наверное буфферизирует. но если поставить: print "msg:$newmsg\n"; все выводит.Сервер тоже рабочий, только send(SockHandle,$MSG,0, $portaddr)==length($MSG)"; не правильная лучше так send(SockHandle,$MSG,0, $portaddr) or die("Send failed\n"); Да, я тестировал не под суперюзером и порт назначил 1370. может у тебя из за этого бага?
- UDP Socket, Alexious, 16:42 , 27-Апр-07 (2)
Модуль не устанавливал. Использую стандартный. По прежнему при попытке компиляции приемника возникает ошибка socket: IO::Socket::INET: Bad protocol 'udp' . Причем если протокол поменять на tcp то все равно ошибка. Хренотень какая-то.
- UDP Socket, vic, 17:11 , 27-Апр-07 (3)
>Модуль не устанавливал. Использую стандартный. По прежнему при попытке компиляции приемника возникает >ошибка socket: IO::Socket::INET: Bad protocol 'udp' . Причем если протокол поменять >на tcp то все равно ошибка. Хренотень какая-то. каким пользователем работаешь? если не рутом то тебе не разрешено открывать порты < 1024.
- UDP Socket, Alexious, 17:21 , 27-Апр-07 (4)
нет не рутом, попробовал 1370, результат тот же
- UDP Socket, Homewrecker, 22:54 , 27-Апр-07 (5)
Весьма странная ошибка. Что пишет cat /etc/protocols | grep -i udp ?
- UDP Socket, Homewrecker, 22:56 , 27-Апр-07 (6)
>Весьма странная ошибка. >Что пишет cat /etc/protocols | grep -i udp ? Да, и права на него проверьте
- UDP Socket, Alexious, 10:17 , 28-Апр-07 (8)
>>Весьма странная ошибка. >>Что пишет cat /etc/protocols | grep -i udp ? > > >Да, и права на него проверьте Да, вот с правами помоему засада. Кажись дело все в них. Будем думать. Спасибо!!!
- UDP Socket, Alexious, 10:16 , 28-Апр-07 (7)
>Весьма странная ошибка. >Что пишет cat /etc/protocols | grep -i udp ? >cat /etc/protocols | grep -i udp udp 17 UDP # user datagram protocol
- UDP Socket, NuINu, 14:34 , 28-Апр-07 (9)
>>Весьма странная ошибка. >>Что пишет cat /etc/protocols | grep -i udp ? > >>cat /etc/protocols | grep -i udp >udp > 17 UDP > # user >datagram protocol короче смотрим: INET.pm ищем: Bad protocol видим после: if(@proto = getprotobyname($proto)) { $proto = $proto[2] || undef; } else { $@ = "Bad protocol '$proto'"; return; }тестируем: getprotobyname с разными параметрами, может у тебя udp вообще нет? тестируем на перле и на си. библиотека libc ее перл динамически подгружает. а дальше к ядру :)
- UDP Socket, Homewrecker, 15:48 , 28-Апр-07 (10)
>тестируем: getprotobyname с разными параметрами, может у тебя udp вообще нет? getprotobyname всего-лишь смотрит в /etc/protocols
- UDP Socket, Alexious, 15:58 , 28-Апр-07 (11)
> >>тестируем: getprotobyname с разными параметрами, может у тебя udp вообще нет? > >getprotobyname всего-лишь смотрит в /etc/protocols СПАСИБО ВСЕМ. ВЕ ДЕЛО БЫЛО В ПРАВАХ. ТЕПЕРЬ РАБОТАЕТ
- UDP Socket, NuINu, 16:39 , 28-Апр-07 (12)
>> >>>тестируем: getprotobyname с разными параметрами, может у тебя udp вообще нет? >> >>getprotobyname всего-лишь смотрит в /etc/protocols > >СПАСИБО ВСЕМ. ВЕ ДЕЛО БЫЛО В ПРАВАХ. ТЕПЕРЬ РАБОТАЕТ :-)
|