Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
|
частично решил. Вопрос о блокировке 03.07.02 22:56 Число просмотров: 898
Автор: 123mitya Статус: Незарегистрированный пользователь
|
Решил проблему бесконенчого ожидания recv, используя IO::Select ,
но сокет получился блокирующий.
Вопрос о блокировки по прежнему в силе.
|
<programming>
|
[Win32] IO::Socket 02.07.02 22:55
Автор: 123mitya Статус: Незарегистрированный пользователь
|
Как создать неблокирующийся сокет под 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 Статус: Незарегистрированный пользователь
|
Решил проблему бесконенчого ожидания recv, используя IO::Select ,
но сокет получился блокирующий.
Вопрос о блокировки по прежнему в силе.
|
|
|