Forum Webscript.Ru
Программирование => Perl => Тема начата: Evgeny от 27 Января 2003, 16:14:54
-
Привет все.
На юниксе это работает:
use Socket;
use Fcntl qw(F_GETFL F_SETFL O_NONBLOCK);
...
socket(S,PF_INET,SOCK_DGRAM,getprotobyname("udp")) || die "socket: $!";
$portaddr=sockaddr_in($port,inet_aton($zielIP));
$flags=fcntl(S,F_GETFL,0);
fcntl(S,F_SETFL,$flags | O_NONBLOCK);
for ($i=0;$i<=$timeOut;$i++)
{ $answer=recv(S,$msg,350,0);
last if (length($msg) || $answer);
sleep 1;
}
Пытаюсь выполнить под Windows - выдаёт ошибку:
Your vendor has not defined Fcntl macro F_GETFL, used at script.pl line 28.
Чему же этот F_GETFL в виндах равен?
И как вообще неблокирующий сокет под Виндами на Перле открыть?
Большое спасибо.
-
Странно. А подробнее о системе и версии Fcntl?
-
Почитай и посмотри код
http://archive.develooper.com/perl5-porters@perl.org/msg62779.html
-
NeoNox
Почитай и посмотри код
http://archive.develooper.com/perl5...g/msg62779.html
Спасибо, это помогло:
my $set_it = "1";
ioctl(S, 0x80000000 | (4 << 16) | (ord(\'f\') << 8) | 126, $set_it);
-
То, что тебе помогло не очень помогло мне. Знаешь ли ты еще пути преодоления проблемы? Заранее спасибо.
-
Какая ошибка, какие версии модулей и перл, какая операционная система и ее версия, это все я должен угадать?