Главная страница


ru.perl

 
 - RU.PERL ----------------------------------------------------------------------
 From : Artem Chuprina                       2:5020/400     19 Nov 2002  16:54:50
 To : "1Eugene Lototsky"
 Subject : Re: Сокеты
 -------------------------------------------------------------------------------- 
 
 Здравствуй, 1Eugene Lototsky.
 
 1L> Как услышать, что говорит демон? Что не так?
 1L> Есть 2 скрипта: демон и клиент. Демон работает от рута и слушает обычного
 1L> клиента через сокет:
 
 1L> === демон ===
 1L> $sockname='/tmp/control.sock';
 1L> socket    sock, AF_UNIX, SOCK_STREAM, 0;
 1L> socket newsock, AF_UNIX, SOCK_STREAM, 0;
 1L> unlink ($sockname); #killing file if exists
 1L> $sun = sockaddr_un($sockname);
 1L> bind sock, $sun || die "bind";
 1L> chmod 0666, $sockname;
 1L> listen sock, 1;
 1L> while (1) {
 1L>     print "deamon running...\n";
 1L>     accept newsock, sock;
 1L>     recv newsock, $data, 500, 0;
 1L>     ($host,$action) = split (';', $data);
 1L>     if ($action eq "start") {
 1L>         $output = start_firewall($host);
 1L>     } elsif ($action eq "stop") {
 1L>         $output = stop_firewall($host);
 1L>     }
 1L>     print sock $output;
 1L> }
 1L> ============
 
 1L> Клиент, передав информацию демону, должен забрать от него ответ.
 
 1L> === клиент ===
 1L>     my $sockname='/tmp/control.sock';
 1L>     socket sock, AF_UNIX, SOCK_STREAM, 0;
 1L>     $sun = sockaddr_un ($sockname);
 1L>     connect sock, $sun || die "bad socket";
 
 1L>     send sock, $hostact, 0;
 
 1L>     while (chomp ($msg=<>)){
 1L>         print "Server $hishost responded ``$msg''\n";
 1L>     }
 1L>     shutdown sock, SHUT_RDWR;
 1L> ============
 
 Так ты читаешь-то в клиенте откуда? А надо - из сокета. Hу и кроме того, со
 строгим чередованием надо осторожно. Если у тебя там данных больше, чем сервер
 способен съесть за раз, рискуешь нарваться на deadlock, когда оба пытаются
 записать и не читают, а сокет уже забит данными в обе стороны.
 
 -- 
 Artem Chuprina
 Communiware.net
 RFC2822: <ran@ran.pp.ru>, FIDO: 2:5020/122.256, ICQ: 13038757
 --- ifmail v.2.15dev5
  * Origin: Leninsky 45 home network (2:5020/400)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 Сокеты   1Eugene Lototsky   18 Nov 2002 23:41:22 
 Re: Сокеты   Artem Chuprina   19 Nov 2002 16:54:50 
 Re: Сокеты   1Eugene Lototsky   21 Nov 2002 14:19:32 
 Re: Сокеты   Artem Chuprina   21 Nov 2002 15:38:38 
 Re: Сокеты   1Eugene Lototsky   21 Nov 2002 14:27:17 
Архивное /ru.perl/14454b498dcbf.html, оценка 3 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional