Forum Webscript.Ru

Программирование => Perl => Тема начата: Evgeny от 27 Января 2003, 16:14:54

Название: Неблокирующий сокет в Windows.
Отправлено: 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 в виндах равен?
И как вообще неблокирующий сокет под Виндами на Перле открыть?
Большое спасибо.
Название: Неблокирующий сокет в Windows.
Отправлено: NeoNox от 27 Января 2003, 16:35:45
Странно. А подробнее о системе и версии Fcntl?
Название: Неблокирующий сокет в Windows.
Отправлено: NeoNox от 27 Января 2003, 16:40:27
Почитай и посмотри код
http://archive.develooper.com/perl5-porters@perl.org/msg62779.html
Название: Неблокирующий сокет в Windows.
Отправлено: Evgeny от 27 Января 2003, 19:08:17
NeoNox
Цитировать
Почитай и посмотри код
http://archive.develooper.com/perl5...g/msg62779.html

Спасибо, это помогло:

my $set_it = "1";
ioctl(S, 0x80000000 | (4 << 16) | (ord(\'f\') << 8) | 126, $set_it);
Название: неблокирующие сокеты в perl
Отправлено: chir от 27 Октября 2005, 19:13:48
То, что тебе помогло не очень помогло мне. Знаешь ли ты еще пути преодоления проблемы? Заранее спасибо.
Название: Неблокирующий сокет в Windows.
Отправлено: NeoNox от 27 Октября 2005, 19:49:36
Какая ошибка, какие версии модулей и перл, какая операционная система и ее версия, это все я должен угадать?