Как создать неблокирующийся сокет под win32, используя IO::Socket ?
Вещи типа
$flags = fcntl($socket, F_GETFL,0)
or die "fisrt : $!";
fcntl($socket, F_SETFL,$flags | O_NONBLOCK)
or die "second: $!";
под win32 не прокатят, говорит, что не определена F_SETFL и F_GETFL
Прочитал в perldoc, что есть метод setsockopt , однако, он не работает (или работает, но не так, как надо).
Использую, как
$socket1->setsockopt(SOL_SOCKET,O_NONBLOCK,1);
- наверное зедсь глюк.
Основная задача : требуется, чтобы recv не ожидала до тех пор, пока придет сообщение, а пыталась получить сообщение, и в случае, если сокет пустой (в очереде нет ничего), то цикл продолжался бы.
Желательно организовать это с помощью IO::Socket
------------
$socket1 = IO::Socket::INET->new(LocalPort=>$PORTNO,Proto=>'udp') or die "error: $@";
$socket1->setsockopt(SOL_SOCKET,O_NONBLOCK,1);
while (1){
if ($socket1->recv($msg,$MAXLEN,O_NONBLOCK)){
print $msg;
}
}
- здесь $sicket1->recv бесконечно ожидает сообщение (до тех пор, пока не появится новое сообщение), как бы сделать так, чтобы бесконечного ожидания не происходило, используя IO::Socket?
Может быть с timeoot'ами что сотворить?
частично решил. Вопрос о блокировке03.07.02 22:56 Автор: 123mitya Статус: Незарегистрированный пользователь