Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Не получили
письмо с кодом активации
?
1 час
1 день
1 неделя
1 месяц
Навсегда
Новости:
Начало
Помощь
Поиск
Календарь
Вход
Регистрация
Forum Webscript.Ru
»
Программирование
»
Perl
»
Ошибка в коде
« предыдущая тема
следующая тема »
Печать
Страницы:
1
[
2
]
Вниз
Автор
Тема: Ошибка в коде (Прочитано 9646 раз)
0 Пользователей и 1 Гость просматривают эту тему.
ZMeY
Завсегдатай
Пользователь
Сообщений: 54
+0/-0
0
Ошибка в коде
«
Ответ #15 :
27 Февраля 2004, 15:49:35 »
NeoNox
я прокоментирую каждую строку - ок?
Записан
NeoNox
Координатор
Глобальный модератор
Ветеран
Сообщений: 3012
+0/-0
0
Ошибка в коде
«
Ответ #16 :
27 Февраля 2004, 16:17:32 »
конечно
Записан
The documentations is your friend
NeoNox
Координатор
Глобальный модератор
Ветеран
Сообщений: 3012
+0/-0
0
Ошибка в коде
«
Ответ #17 :
27 Февраля 2004, 16:28:22 »
кстати, посмотри вот сюда -
http://poe.perl.org/?Listing.evolution.select
учиться лучше на правильном коде.
Записан
The documentations is your friend
ZMeY
Завсегдатай
Пользователь
Сообщений: 54
+0/-0
0
Ошибка в коде
«
Ответ #18 :
27 Февраля 2004, 16:31:15 »
Код:
use
IO
::
Socket
;
use
IO
::
Select
;
use
HTTP
::
Daemon
;
use
POSIX
;
use
strict
;
use
Fcntl
;
$|=
1
;
my $port
=
5555
;
my $max_clients
=
35
;
#SOMAXCONN
my $server
=
HTTP
::
Daemon
->
new
(
Proto
=> \
'tcp\', LocalPort => $port, Listen => $max_clients) or die "Can\'t make server socket: $@\\n";
nonblock($server);
my $select = IO::Select->new($server);
print "[Chat server runing on ", $server->url, "] \\n\\n";
while (1)
{
my $client; #объявляю переменную
foreach $client ($select->can_read(1)) #по очереди обращаюсь ко всем сокетам объекта селект
{
if ($client == $server) #если сокет является слушающим сервером
{
my $new_client = $server->accept(); #акцепт нового клиента
if(defined($new_client)) #если новый клиент подключен
{
nonblock($new_client); #перевод клиента в неблокирующий режим
$select->add($new_client); #добавляем клиента в общую группу сокетов
print "Client accepted\\n";
}
}
else
{
#это подскажанный код - что он делает сказать не могу, но смысл такой: определение отключившихся клиентов
my $data = \'\';
my $rv = $client->recv($data, POSIX::BUFSIZ, 0);
if(!(defined($rv) && length $data))#если клиент отключился
{
$select->remove($client); #удаляем клиента из группы соктов
close($client); #закрываем клиента
print "Client closed\\n";
next; #переходим к следующему элементу группы клиентов
}
else #если клиент на связи
{
my $request = $client->get_request();#посылаем запрос
if (defined($request))#т.к. клиент в неблок. режиме - проверяем наличие запроса
{
if ($request->method eq \'GET\')#если отправлен запрос гет
{
print $request->as_string; #отладочная строка, поднее будет заменена кодом обработки строки запроса
}
}#конец обработки реквеста
}#конец обработки клиента
}
}
}
sub nonblock {
my $sock = shift;
if ($^O eq \'MSWin32\')
{
sub FIONBIO { 0x8004667e }
my $set_it = "1";
ioctl($sock, FIONBIO, $set_it)
or die "Can\'t set the socket non-blocking: $!";
} else {
my $flags = fcntl($sock, F_GETFL, 0)
or die "fcntl fails with F_GETFL: $!";
fcntl($sock, F_SETFL, $flags | O_NONBLOCK)
or die "fcntl fails with F_SETFL: $!";
}
}
Вопрос такой - как заменить непрокоментированный блок, таким обрахззом, что бы он возвращал истину, если клиент он-лайн и лож, если отключился
«
Последнее редактирование: 27 Февраля 2004, 17:27:30 от NeoNox
»
Записан
NeoNox
Координатор
Глобальный модератор
Ветеран
Сообщений: 3012
+0/-0
0
Ошибка в коде
«
Ответ #19 :
27 Февраля 2004, 17:27:16 »
То что тебя интересует это чтение из ранее установленного сокета.
Записан
The documentations is your friend
ZMeY
Завсегдатай
Пользователь
Сообщений: 54
+0/-0
0
Ошибка в коде
«
Ответ #20 :
27 Февраля 2004, 21:12:46 »
NeoNox
я знаю, что это чтение - я не совсем пониаю, как с его помощью определяется статус клиента...ну да это и не важно!
Как заменить этот код другими кодом, который однозначно будет определять - на связи клиент или уже отключился
Записан
Печать
Страницы:
1
[
2
]
Вверх
« предыдущая тема
следующая тема »
Forum Webscript.Ru
»
Программирование
»
Perl
»
Ошибка в коде
Sitemap
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28