Sophie

Sophie

distrib > Mandriva > 2008.1 > i586 > by-pkgid > 703d980c580707c382b4e43e25965bc5 > files > 9681

php-manual-pt_BR-5.2.4-1mdv2008.1.noarch.rpm

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<HTML
><HEAD
><TITLE
>socket_select</TITLE
><META
NAME="GENERATOR"
CONTENT="Modular DocBook HTML Stylesheet Version 1.79"><LINK
REL="HOME"
TITLE="Manual do PHP"
HREF="index.html"><LINK
REL="UP"
TITLE="Funções de Socket"
HREF="ref.sockets.html"><LINK
REL="PREVIOUS"
TITLE="socket_recvfrom"
HREF="function.socket-recvfrom.html"><LINK
REL="NEXT"
TITLE="socket_send"
HREF="function.socket-send.html"><META
HTTP-EQUIV="Content-type"
CONTENT="text/html; charset=UTF-8"></HEAD
><BODY
CLASS="refentry"
BGCOLOR="#FFFFFF"
TEXT="#000000"
LINK="#0000FF"
VLINK="#840084"
ALINK="#0000FF"
><DIV
CLASS="NAVHEADER"
><TABLE
SUMMARY="Header navigation table"
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
><TR
><TH
COLSPAN="3"
ALIGN="center"
>Manual do PHP</TH
></TR
><TR
><TD
WIDTH="10%"
ALIGN="left"
VALIGN="bottom"
><A
HREF="function.socket-recvfrom.html"
ACCESSKEY="P"
>Anterior</A
></TD
><TD
WIDTH="80%"
ALIGN="center"
VALIGN="bottom"
></TD
><TD
WIDTH="10%"
ALIGN="right"
VALIGN="bottom"
><A
HREF="function.socket-send.html"
ACCESSKEY="N"
>Próxima</A
></TD
></TR
></TABLE
><HR
ALIGN="LEFT"
WIDTH="100%"></DIV
><H1
><A
NAME="function.socket-select"
></A
>socket_select</H1
><DIV
CLASS="refnamediv"
><A
NAME="AEN208759"
></A
><P
>    (PHP 4 &#62;= 4.1.0, PHP 5)</P
>socket_select&nbsp;--&nbsp;
     Executa a chamada de sistema select() nos arrays dados de sockets 
     com um timeout especificado
    </DIV
><DIV
CLASS="refsect1"
><A
NAME="AEN208762"
></A
><H2
>Descrição</H2
>int <B
CLASS="methodname"
>socket_select</B
> ( array &#38;read, array &#38;write, array &#38;except, int tv_sec [, int tv_usec] )<BR
></BR
><DIV
CLASS="warning"
><P
></P
><TABLE
CLASS="warning"
BORDER="1"
WIDTH="100%"
><TR
><TD
ALIGN="CENTER"
><B
>Atenção</B
></TD
></TR
><TR
><TD
ALIGN="LEFT"
><P
>Esta função é
 <SPAN
CLASS="emphasis"
><I
CLASS="emphasis"
>EXPERIMENTAL</I
></SPAN
>. Isso quer dizer que o comportamento desta função
 e seu nome, incluindo TUDO o que está documentado aqui
 pode mudar em futuras versões do PHP, SEM QUALQUER NOTIFICAÇÃO.
 Esteja avisado, e use esta função por sua própria conta e risco.</P
></TD
></TR
></TABLE
></DIV
><P
>&#13;     <B
CLASS="function"
>socket_select()</B
> aceita arrays de sockets e
     aguarda até que seu status seja alterado. Estes vem com "background" de sockets BSD
     irá reconhecer aquele array de socket resource são de fato a chamada ao arquivo descritor de configuração (fds).
     Três arrays independentes de socket resources são observados.
    </P
><P
>&#13;     A lista de sockets no array <CODE
CLASS="parameter"
>read</CODE
> irá ser mostrada para
     ver se o caractere disponível anterior à leitura (mais precisamente, para ver se a leitura
     não está obstruída - em particular, um socket resource está também no fim-de-arquivo (EOF) , neste caso
     o <A
HREF="function.socket-read.html"
><B
CLASS="function"
>socket_read()</B
></A
> irá retornar uma string com comprimento zero.
    </P
><P
>&#13;     A lista de sockets no array <CODE
CLASS="parameter"
>write</CODE
> irá ser visualizada
     para mostrar se não é uma escrita não está obstruída.
    </P
><P
>&#13;     A lista de sockets no array <CODE
CLASS="parameter"
>except</CODE
> irá mostrar
     caso haja exceções.
    </P
><DIV
CLASS="warning"
><P
></P
><TABLE
CLASS="warning"
BORDER="1"
WIDTH="100%"
><TR
><TD
ALIGN="CENTER"
><B
>Atenção</B
></TD
></TR
><TR
><TD
ALIGN="LEFT"
><P
>&#13;      Na saída, os arrays são modificados para indicar qual socket resource
      atualmente alterou seu status.
     </P
></TD
></TR
></TABLE
></DIV
><P
>&#13;     Você não precisa passar cada array para
     <B
CLASS="function"
>socket_select()</B
>. Você pode deixá-los de fora e usar um
     array vazio ou <TT
CLASS="constant"
><B
>NULL</B
></TT
> ao invés disso. Também não se esqueça que esses arrays são passados
     <SPAN
CLASS="emphasis"
><I
CLASS="emphasis"
>by reference</I
></SPAN
> e irão ser modificados após o retorno de
     <B
CLASS="function"
>socket_select()</B
>.
    </P
><P
>&#13;     <TABLE
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
CLASS="EXAMPLE"
><TR
><TD
><DIV
CLASS="example"
><A
NAME="AEN208802"
></A
><P
><B
>Exemplo 1. Exemplo de <B
CLASS="function"
>socket_select()</B
></B
></P
><TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
CELLPADDING="5"
><TR
><TD
><code><font color="#000000">
<font color="#0000BB">&lt;?php<br /></font><font color="#FF8000">/* Prepare the read array */<br /></font><font color="#0000BB">$read </font><font color="#007700">= array(</font><font color="#0000BB">$socket1</font><font color="#007700">, </font><font color="#0000BB">$socket2</font><font color="#007700">);<br /><br /></font><font color="#0000BB">$num_changed_sockets </font><font color="#007700">= </font><font color="#0000BB">socket_select</font><font color="#007700">(</font><font color="#0000BB">$read</font><font color="#007700">, </font><font color="#0000BB">$write </font><font color="#007700">= </font><font color="#0000BB">NULL</font><font color="#007700">, </font><font color="#0000BB">$except </font><font color="#007700">= </font><font color="#0000BB">NULL</font><font color="#007700">, </font><font color="#0000BB">0</font><font color="#007700">);<br /><br />if (</font><font color="#0000BB">$num_changed_sockets </font><font color="#007700">=== </font><font color="#0000BB">false</font><font color="#007700">) {<br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#FF8000">/* Error handling */<br /></font><font color="#007700">} else if (</font><font color="#0000BB">$num_changed_sockets </font><font color="#007700">&gt; </font><font color="#0000BB">0</font><font color="#007700">) {<br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#FF8000">/* At least at one of the sockets something interesting happened */<br /></font><font color="#007700">}<br /></font><font color="#0000BB">?&gt;</font>
</font>
</code></TD
></TR
></TABLE
></DIV
></TD
></TR
></TABLE
>
    </P
><DIV
CLASS="note"
><BLOCKQUOTE
CLASS="note"
><P
><B
>Nota: </B
>
      Devido a uma limitação no atual Zend Engine não é possível passar
um modificador de constante como <TT
CLASS="constant"
><B
>NULL</B
></TT
> diretamente como parâmetro para
uma função que tem exceção para este parâmetro sendo passado por referência. Ao invés
disso use uma variável temporária ou uma expressão com o leftmost member
sendo uma variável temporária:
      <TABLE
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
CLASS="EXAMPLE"
><TR
><TD
><DIV
CLASS="example"
><A
NAME="AEN208809"
></A
><P
><B
>Exemplo 2. Usando <TT
CLASS="constant"
><B
>NULL</B
></TT
> com <B
CLASS="function"
>socket_select()</B
></B
></P
><TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
CELLPADDING="5"
><TR
><TD
><code><font color="#000000">
<font color="#0000BB">&lt;?php<br />socket_select</font><font color="#007700">(</font><font color="#0000BB">$r</font><font color="#007700">, </font><font color="#0000BB">$w</font><font color="#007700">, </font><font color="#0000BB">$e </font><font color="#007700">= </font><font color="#0000BB">NULL</font><font color="#007700">, </font><font color="#0000BB">0</font><font color="#007700">);<br /></font><font color="#0000BB">?&gt;</font>
</font>
</code></TD
></TR
></TABLE
></DIV
></TD
></TR
></TABLE
>
     </P
></BLOCKQUOTE
></DIV
><P
>&#13;     O <CODE
CLASS="parameter"
>tv_sec</CODE
> e <CODE
CLASS="parameter"
>tv_usec</CODE
>
     juntos formam o parâmetro <SPAN
CLASS="emphasis"
><I
CLASS="emphasis"
>timeout</I
></SPAN
>. O
     <SPAN
CLASS="emphasis"
><I
CLASS="emphasis"
>timeout</I
></SPAN
> é o limite máximo da quantidade de tempo passado
antes do retorno de <B
CLASS="function"
>socket_select()</B
>.
     <CODE
CLASS="parameter"
>tv_sec</CODE
> deve ser zero , causando o retorno imediato de
     <B
CLASS="function"
>socket_select()</B
>. Isso é útil para polling. Se <CODE
CLASS="parameter"
>tv_sec</CODE
> é <TT
CLASS="constant"
><B
>NULL</B
></TT
> (sem timeout),
     <B
CLASS="function"
>socket_select()</B
> pode bloquear definitivamente.
    </P
><P
>&#13;     Em caso de sucesso <B
CLASS="function"
>socket_select()</B
> retorna o número
     de socket resorces contidos nos arrays modificados, que deve ser zero se
     alguma coisa interessante acontecer antes do timeout expirar. Em caso de erro, <TT
CLASS="constant"
><B
>FALSE</B
></TT
>
     é retornado. O código do erro pode ser retornado com 
     <A
HREF="function.socket-last-error.html"
><B
CLASS="function"
>socket_last_error()</B
></A
>.
    </P
><DIV
CLASS="note"
><BLOCKQUOTE
CLASS="note"
><P
><B
>Nota: </B
>
     Tenha certeza de usar o operador <TT
CLASS="literal"
>===</TT
> quando checar por um erro. Desde de que <B
CLASS="function"
>socket_select()</B
> deve retornar 0 a
     comparação com <TT
CLASS="literal"
>==</TT
> deve retornar <TT
CLASS="constant"
><B
>TRUE</B
></TT
>:
     <TABLE
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
CLASS="EXAMPLE"
><TR
><TD
><DIV
CLASS="example"
><A
NAME="AEN208835"
></A
><P
><B
>Exemplo 3. Entendendo resultados de <B
CLASS="function"
>socket_select()</B
></B
></P
><TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
CELLPADDING="5"
><TR
><TD
><code><font color="#000000">
<font color="#0000BB">&lt;?php<br /></font><font color="#007700">if (</font><font color="#0000BB">false </font><font color="#007700">=== </font><font color="#0000BB">socket_select</font><font color="#007700">(</font><font color="#0000BB">$r</font><font color="#007700">, </font><font color="#0000BB">$w</font><font color="#007700">, </font><font color="#0000BB">$e </font><font color="#007700">= </font><font color="#0000BB">NULL</font><font color="#007700">, </font><font color="#0000BB">0</font><font color="#007700">)) {<br />&nbsp;&nbsp;&nbsp;&nbsp;echo </font><font color="#DD0000">"socket_select() failed, reason: " </font><font color="#007700">.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">socket_strerror</font><font color="#007700">(</font><font color="#0000BB">socket_last_error</font><font color="#007700">()) . </font><font color="#DD0000">"\n"</font><font color="#007700">;<br />}<br /></font><font color="#0000BB">?&gt;</font>
</font>
</code></TD
></TR
></TABLE
></DIV
></TD
></TR
></TABLE
>
     </P
></BLOCKQUOTE
></DIV
><DIV
CLASS="note"
><BLOCKQUOTE
CLASS="note"
><P
><B
>Nota: </B
>
      Esteja consciente que algumas implementações de sockets
      precisam ser manuseadas com muito cuidado. As regras básicas:
      <P
></P
><UL
><LI
><P
>&#13;         Você deve sempre tentar usar <B
CLASS="function"
>socket_select()</B
>
         sem timeout. Seu programa não deve fazer nada se não há dados disponíveis. Códigos que dependem de timeouts não são usualmente portáveis e dificultam o debug.
        </P
></LI
><LI
><P
>&#13;         No socket resource deve ser adicionado alguma configuração se você
         não pretende checar o resultado após a chamada de <B
CLASS="function"
>socket_select()</B
>, e responder
de forma apropriada. Após o retorno de <B
CLASS="function"
>socket_select()</B
>, todos os sockets resources em todos
os arrays devem ser checados. Algum socket resource que está disponível para escrita
deve ser escrito, e algum socket resource disponível para leitura deve ser lido.
        </P
></LI
><LI
><P
>&#13;         Se você está lendo/escrevendo um retorno de socket em array esteja
         consciente que eles não necessariamente estão lendo/escrevendo a quantidade
         completa de dados que você requisitou. Esteja preparado para somente  habilitar para leitura/escrita um único byte.
        </P
></LI
><LI
><P
>&#13;         Isso é comum na grande maioria de implementações de socket que pegam
excessões através do <CODE
CLASS="parameter"
>except</CODE
> array está fora do limite de dados recebidos no socket.
        </P
></LI
></UL
>
     </P
></BLOCKQUOTE
></DIV
><P
>&#13;     Veja também
     <A
HREF="function.socket-read.html"
><B
CLASS="function"
>socket_read()</B
></A
>,
     <A
HREF="function.socket-write.html"
><B
CLASS="function"
>socket_write()</B
></A
>,
     <A
HREF="function.socket-last-error.html"
><B
CLASS="function"
>socket_last_error()</B
></A
> e
     <A
HREF="function.socket-strerror.html"
><B
CLASS="function"
>socket_strerror()</B
></A
>.
    </P
></DIV
><DIV
CLASS="NAVFOOTER"
><HR
ALIGN="LEFT"
WIDTH="100%"><TABLE
SUMMARY="Footer navigation table"
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
><TR
><TD
WIDTH="33%"
ALIGN="left"
VALIGN="top"
><A
HREF="function.socket-recvfrom.html"
ACCESSKEY="P"
>Anterior</A
></TD
><TD
WIDTH="34%"
ALIGN="center"
VALIGN="top"
><A
HREF="index.html"
ACCESSKEY="H"
>Principal</A
></TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top"
><A
HREF="function.socket-send.html"
ACCESSKEY="N"
>Próxima</A
></TD
></TR
><TR
><TD
WIDTH="33%"
ALIGN="left"
VALIGN="top"
>socket_recvfrom</TD
><TD
WIDTH="34%"
ALIGN="center"
VALIGN="top"
><A
HREF="ref.sockets.html"
ACCESSKEY="U"
>Acima</A
></TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top"
>socket_send</TD
></TR
></TABLE
></DIV
></BODY
></HTML
>