|
|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : ‘ҐаЈҐ© ‹ аЁ®®ў 2:5020/400 16 Jul 2004 06:10:55 To : Dmitry Antonov Subject : Re: поиск сервера -------------------------------------------------------------------------------- "Dmitry Antonov" <Dmitry.Antonov@p12.f33.n5014.z2.fidonet.org> сообщил/сообщила в новостях следующее: news:1089891953@p12.f33.n5014.z2.fidonet.ftn... > Ты хочешь сказать что если в connect`е в качестве адpеса yказать broadcast, то > всё бyдет OK. Что-то y меня такой ваpиант не пpокатывает. Кроме этого надо разрешить сокету работать в широковещательном режиме. Вот кусок из моей программы : # Открываем сокет my ($sock, $server_host,$server_port, $ipaddr, $hishost, $response, $MAXLEN, $TIMEOUT); $MAXLEN = 1500; $TIMEOUT = 1; $server_port = 161; $server_host = INADDR_BROADCAST(); $sock = IO::Socket::INET->new(Proto => 'udp', Reuse => 1) or die "Creating Socket : $!\n"; # Разрешаем широковещательную передачу $sock->sockopt(SO_BROADCAST, 1) or die "sockopt : $!\n"; my $readable = IO::Select->new() # Объект для выборки готовых сокетов or die "Creating Select oject : $!\n"; $readable->add($sock); # Отправляем сообщение my $sin_out = sockaddr_in($server_port, $server_host ); $sock->send($session->{'_buffer'}, 0, $sin_out) or die "Send : $!\n"; # Принимаем ответные сообщения my ($StartTime, $Count, $hispaddr, $port, $hisiaddr, $new_msg, $host); my @ready; $StartTime = time(); # Цикл ожидания ответов - 8 секунд while (time() < $StartTime + 8) { # Ожидаем сообщение @ready = $readable->can_read($TIMEOUT); foreach my $s ( @ready ) { # Читаем поступившее сообщение ($hispaddr = $s->recv($new_msg, $MAXLEN) )|| die "recv: $!"; Дальше, в цикле, обрабатываешь сообщение и берешь следующее.. Удачи! Сергей Ларионов --- ifmail v.2.15dev5.3 * Origin: Tomsktelecom - Digital Networks (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/122326dce0b94.html, оценка из 5, голосов 10
|