<?xml version="1.0" encoding="koi8-r"?>
<rss version="0.91">
<channel>
    <title>OpenForum RSS: Timeout on perl socket udp</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/7079.html</link>
    <description>В общем проблемка такая. Скрипт:&lt;br&gt;my $socket = IO::Socket::INET-&amp;gt;new(PeerAddr =&amp;gt; $host, PeerPort =&amp;gt; $port, Proto =&amp;gt; &apos;udp&apos;, TimeOut =&amp;gt; 5 );&lt;br&gt;syswrite $socket, &quot;&#092;xFF&#092;xFF&#092;xFF&#092;xFFTSource Engine Query&#092;x00&quot;;&lt;br&gt;sysread $socket, $buffer, 96;&lt;br&gt;close $socket;&lt;br&gt;отсылает по протоколу удп запрос на сервак контры, потом кидает полученное в переменную $buffer, но если пакет не дойдет то скрипта, то он зависает.. Таймаут в сокетах не помогает :( Как можно его заставить ждать например 2 секунды и закрывать сокет, а не ждать вечно?&lt;br&gt;</description>

<item>
    <title>Timeout on perl socket udp (Nikolai Sokolov)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/7079.html#9</link>
    <pubDate>Thu, 29 Jan 2009 11:42:31 GMT</pubDate>
    <description>&amp;gt;В общем проблемка такая. Скрипт: &lt;br&gt;&amp;gt;my $socket = IO::Socket::INET-&amp;gt;new(PeerAddr =&amp;gt; $host, PeerPort =&amp;gt; $port, Proto =&amp;gt; &apos;udp&apos;, TimeOut =&amp;gt; 5 );&lt;br&gt;&amp;gt;syswrite $socket, &quot;&#092;xFF&#092;xFF&#092;xFF&#092;xFFTSource Engine Query&#092;x00&quot;; &lt;br&gt;&amp;gt;sysread $socket, $buffer, 96; &lt;br&gt;&amp;gt;close $socket; &lt;br&gt;&amp;gt;отсылает по протоколу удп запрос на сервак контры, потом кидает полученное в &lt;br&gt;&amp;gt;переменную $buffer, но если пакет не дойдет то скрипта, то он &lt;br&gt;&amp;gt;зависает.. Таймаут в сокетах не помогает :( Как можно его заставить &lt;br&gt;&amp;gt;ждать например 2 секунды и закрывать сокет, а не ждать вечно? &lt;br&gt;&amp;gt;&lt;br&gt;&lt;br&gt;# При помощи alarm() . Для мили и наносекунд можно использовать Time::HiRes (www.cpan.org)&lt;br&gt;##############################################&lt;br&gt;use Errno qw(EAGAIN);&lt;br&gt;&lt;br&gt; DUAL_PROC: &#123;&lt;br&gt;&lt;br&gt;  if ($pid = fork) &#123;&lt;br&gt;    waitpid($pid,0);&lt;br&gt;  &#125; elsif (defined $pid) &#123;&lt;br&gt;   alarm($n); &lt;br&gt;#&lt;br&gt;# Код перл прекратит существовать через $n секунд&lt;br&gt;#&lt;br&gt;&#125; elsif ($! == EAGAIN ) &#123; print &quot;Процесс ПОВИС&quot;; redo DUAL_PROC; &#125;&lt;br&gt;   else &#123; die &quot;Ошибка ветвления: $!&quot;; &#125;&lt;br&gt;&lt;br&gt;  $SIG&#123;CHILD&#125; = sub &#123; 1 &#125; until ( waitpid(</description>
</item>

<item>
    <title>Timeout on perl socket udp (DemonShi)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/7079.html#8</link>
    <pubDate>Fri, 04 Jan 2008 20:00:26 GMT</pubDate>
    <description>&amp;gt;В общем проблемка такая. Скрипт: &lt;br&gt;&amp;gt;my $socket = IO::Socket::INET-&amp;gt;new(PeerAddr =&amp;gt; $host, PeerPort =&amp;gt; $port, Proto =&amp;gt; &apos;udp&apos;, TimeOut =&amp;gt; 5 );&lt;br&gt;&amp;gt;syswrite $socket, &quot;&#092;xFF&#092;xFF&#092;xFF&#092;xFFTSource Engine Query&#092;x00&quot;; &lt;br&gt;&amp;gt;sysread $socket, $buffer, 96; &lt;br&gt;&amp;gt;close $socket; &lt;br&gt;&amp;gt;отсылает по протоколу удп запрос на сервак контры, потом кидает полученное в &lt;br&gt;&amp;gt;переменную $buffer, но если пакет не дойдет то скрипта, то он &lt;br&gt;&amp;gt;зависает.. Таймаут в сокетах не помогает :( Как можно его заставить &lt;br&gt;&amp;gt;ждать например 2 секунды и закрывать сокет, а не ждать вечно? &lt;br&gt;&amp;gt;&lt;br&gt;&lt;br&gt;Все, мне помогли)) ПРоблема решилась с использованием select&lt;br&gt;&lt;br&gt;</description>
</item>

<item>
    <title>Timeout on perl socket udp (angra)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/7079.html#7</link>
    <pubDate>Thu, 03 Jan 2008 07:41:54 GMT</pubDate>
    <description>&amp;gt;А можно конкретнее по этим двум пунктам? &lt;br&gt;&lt;br&gt;1. Использовать неблокирующее чтение.&lt;br&gt;Для большинства операций ввода/вывода Perl предоставляет вариант неблокирующего чтения. Если мы его используем, то вызов read/sysread приводит к мгновенному возврату управления в программу. Для того чтобы определить действительно ли было что-то считано проверяем возвращенное значение. Обычно функция чтения помещается в цикл и проверяется ее значение и еще какие-либо условия. Выбор между блокирующим/неблокирующим режимом обычно осуществляется в момент открытия хендлера. В вашем случае смотрим perldoc IO::Socket::INET и находим следующий параметр:&lt;br&gt;Blocking    Determine if connection will be blocking mode&lt;br&gt;If &quot;Blocking&quot; is set to 0, the connection will be in nonblocking mode.  If not specified it defaults to 1 (blocking mode).&lt;br&gt;&lt;br&gt;2. Использовать select&lt;br&gt;Тут не так все просто. Стоит вдумчиво почитать man и посмотреть несколько примеров кода, первое что вспоминается Net::DNS::Async. &lt;br&gt;</description>
</item>

<item>
    <title>Timeout on perl socket udp (DemonShi)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/7079.html#6</link>
    <pubDate>Wed, 02 Jan 2008 10:06:45 GMT</pubDate>
    <description>&amp;gt;&amp;gt;&amp;gt;&amp;gt; TimeOut =&amp;gt; 5&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;А опции точно case insensitive? &lt;br&gt;&amp;gt;&amp;gt;&amp;gt;В документации написано Timeout, а не TimeOut. &lt;br&gt;&amp;gt;&amp;gt;&lt;br&gt;&amp;gt;&amp;gt;Что за case insensitive опции? &lt;br&gt;&amp;gt;&lt;br&gt;&amp;gt;Зависящие от регистра символов. &lt;br&gt;&lt;br&gt;Сенк, только Timeout тоже не решает проблему..&lt;br&gt;</description>
</item>

<item>
    <title>Timeout on perl socket udp (anonymous)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/7079.html#5</link>
    <pubDate>Tue, 01 Jan 2008 23:40:13 GMT</pubDate>
    <description>&amp;gt;&amp;gt;&amp;gt; TimeOut =&amp;gt; 5&lt;br&gt;&amp;gt;&amp;gt;&lt;br&gt;&amp;gt;&amp;gt;А опции точно case insensitive? &lt;br&gt;&amp;gt;&amp;gt;В документации написано Timeout, а не TimeOut. &lt;br&gt;&amp;gt;&lt;br&gt;&amp;gt;Что за case insensitive опции? &lt;br&gt;&lt;br&gt;Зависящие от регистра символов.&lt;br&gt;</description>
</item>

<item>
    <title>Timeout on perl socket udp (DemonShi)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/7079.html#4</link>
    <pubDate>Mon, 31 Dec 2007 15:52:31 GMT</pubDate>
    <description>&amp;gt;&amp;gt; TimeOut =&amp;gt; 5&lt;br&gt;&amp;gt;&lt;br&gt;&amp;gt;А опции точно case insensitive? &lt;br&gt;&amp;gt;В документации написано Timeout, а не TimeOut. &lt;br&gt;&lt;br&gt;Что за case insensitive опции?&lt;br&gt;&lt;br&gt;</description>
</item>

<item>
    <title>Timeout on perl socket udp (Michelnok)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/7079.html#3</link>
    <pubDate>Mon, 31 Dec 2007 15:06:26 GMT</pubDate>
    <description>&amp;gt; TimeOut =&amp;gt; 5&lt;br&gt;&lt;br&gt;А опции точно case insensitive?&lt;br&gt;В документации написано Timeout, а не TimeOut.&lt;br&gt;</description>
</item>

<item>
    <title>Timeout on perl socket udp (DemonShi)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/7079.html#2</link>
    <pubDate>Mon, 31 Dec 2007 12:20:27 GMT</pubDate>
    <description>&amp;gt;1. Использовать неблокирующее чтение &lt;br&gt;&amp;gt;2. Использовать select, последнее особенно полезно, если обрабатываете сразу несколько асинхронных соединений. &lt;br&gt;&amp;gt;&lt;br&gt;&lt;br&gt;А можно конкретнее по этим двум пунктам?&lt;br&gt;</description>
</item>

<item>
    <title>Timeout on perl socket udp (angra)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/7079.html#1</link>
    <pubDate>Mon, 31 Dec 2007 01:27:11 GMT</pubDate>
    <description>1. Использовать неблокирующее чтение&lt;br&gt;2. Использовать select, последнее особенно полезно, если обрабатываете сразу несколько асинхронных соединений.&lt;br&gt;</description>
</item>

</channel>
</rss>
