URL: https://www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 6420
[ Назад ]

Исходное сообщение
"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 , 27-Апр-07 16:37 
>Написал простой сокет для 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 , 27-Апр-07 16:42 
Модуль не устанавливал. Использую стандартный. По прежнему при попытке компиляции приемника возникает ошибка socket: IO::Socket::INET: Bad protocol 'udp' . Причем если протокол поменять на tcp то все равно ошибка. Хренотень какая-то.

"UDP Socket"
Отправлено vic , 27-Апр-07 17:11 
>Модуль не устанавливал. Использую стандартный. По прежнему при попытке компиляции приемника возникает
>ошибка socket: IO::Socket::INET: Bad protocol 'udp' . Причем если протокол поменять
>на tcp то все равно ошибка. Хренотень какая-то.

каким пользователем работаешь?
если не рутом то тебе не разрешено открывать порты < 1024.


"UDP Socket"
Отправлено Alexious , 27-Апр-07 17:21 
нет не рутом, попробовал 1370, результат тот же

"UDP Socket"
Отправлено Homewrecker , 27-Апр-07 22:54 
Весьма странная ошибка.
Что пишет cat /etc/protocols | grep -i udp ?

"UDP Socket"
Отправлено Homewrecker , 27-Апр-07 22:56 
>Весьма странная ошибка.
>Что пишет cat /etc/protocols | grep -i udp ?


Да, и права на него проверьте


"UDP Socket"
Отправлено Alexious , 28-Апр-07 10:17 
>>Весьма странная ошибка.
>>Что пишет cat /etc/protocols | grep -i udp ?
>
>
>Да, и права на него проверьте
Да, вот с правами помоему засада. Кажись дело все в них. Будем думать. Спасибо!!!


"UDP Socket"
Отправлено Alexious , 28-Апр-07 10:16 
>Весьма странная ошибка.
>Что пишет cat /etc/protocols | grep -i udp ?

>cat /etc/protocols | grep -i udp
udp             17      UDP             # user datagram protocol


"UDP Socket"
Отправлено NuINu , 28-Апр-07 14:34 
>>Весьма странная ошибка.
>>Что пишет 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 , 28-Апр-07 15:48 

>тестируем: getprotobyname с разными параметрами, может у тебя udp вообще нет?

getprotobyname всего-лишь смотрит в /etc/protocols


"UDP Socket"
Отправлено Alexious , 28-Апр-07 15:58 
>
>>тестируем: getprotobyname с разными параметрами, может у тебя udp вообще нет?
>
>getprotobyname всего-лишь смотрит в /etc/protocols

СПАСИБО ВСЕМ. ВЕ ДЕЛО БЫЛО В ПРАВАХ. ТЕПЕРЬ РАБОТАЕТ


"UDP Socket"
Отправлено NuINu , 28-Апр-07 16:39 
>>
>>>тестируем: getprotobyname с разными параметрами, может у тебя udp вообще нет?
>>
>>getprotobyname всего-лишь смотрит в /etc/protocols
>
>СПАСИБО ВСЕМ. ВЕ ДЕЛО БЫЛО В ПРАВАХ. ТЕПЕРЬ РАБОТАЕТ
:-)