1
0
mirror of https://github.com/php/doc-es.git synced 2026-03-25 16:02:13 +01:00
Files
archived-doc-es/reference/sockets/functions/socket-select.xml
Richard Quadling 1fa367dd0d Native EOL
Use consistent line terminator.


git-svn-id: https://svn.php.net/repository/phpdoc/es/trunk@317671 c90b9560-bf6c-de11-be94-00142212c4b1
2011-10-03 16:59:17 +00:00

258 lines
8.7 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 96c9d88bad9a7d7d44bfb7f26c226df7ee9ddf26 Maintainer: seros Status: ready -->
<refentry xmlns="http://docbook.org/ns/docbook" xml:id="function.socket-select">
<refnamediv>
<refname>socket_select</refname>
<refpurpose>Ejecuta la llamada a select() del sistema sobre las matrices de sockets dadas con un tiempo límite especificado</refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
<methodsynopsis>
<type>int</type><methodname>socket_select</methodname>
<methodparam><type>array</type><parameter role="reference">read</parameter></methodparam>
<methodparam><type>array</type><parameter role="reference">write</parameter></methodparam>
<methodparam><type>array</type><parameter role="reference">except</parameter></methodparam>
<methodparam><type>int</type><parameter>tv_sec</parameter></methodparam>
<methodparam choice="opt"><type>int</type><parameter>tv_usec</parameter><initializer>0</initializer></methodparam>
</methodsynopsis>
<para>
<function>socket_select</function> acepta matrices de sockets y las espera para
cambiar el estado. Aquellas que vienen con un fondo de sockets BSD
reconocerán que aquellas matrices de recursos socket son de hecho los también llamados conjuntos
descriptores de archivos. Se observan tres matrices de recursos socket independientes.
</para>
</refsect1>
<refsect1 role="parameters">
&reftitle.parameters;
<para>
<variablelist>
<varlistentry>
<term><parameter>read</parameter></term>
<listitem>
<para>
Los sockets listados en la matriz <parameter>read</parameter> serán
observados para ver si los caracteres están disponibles para lectura (más
precisamente, para ver si una lectura no bloqueará - en particular, un recurso
socket también está listo al final del archivo, en cuyo caso un
<function>socket_read</function> devolverá una cadena de longitud cero).
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>write</parameter></term>
<listitem>
<para>
Los sockets listados en la matriz <parameter>write</parameter> serán
observados para ver si una escritura no bloqueará.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>except</parameter></term>
<listitem>
<para>
Los sockets listados en la matriz <parameter>except</parameter> serán
observados para excepciones.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>tv_sec</parameter></term>
<listitem>
<para>
<parameter>tv_sec</parameter> y <parameter>tv_usec</parameter>
forman juntos el parámetros <literal>timeout</literal>.
<literal>timeout</literal> es un límite superior de la cantidad de tiempo
trancurrido antes de que <function>socket_select</function> devuelva.
<parameter>tv_sec</parameter> puede ser cero, causando que
<function>socket_select</function> devuelva inmediatamente. Esto es útil
para consultas constantes (polling). Si <parameter>tv_sec</parameter> es &null; (sin tiempo
línmite), <function>socket_select</function> puede bloquear indefinidamente.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>tv_usec</parameter></term>
<listitem>
<para>
</para>
</listitem>
</varlistentry>
</variablelist>
</para>
<warning>
<para>
Al salir, las matrices son modificadas para indicar que recurso socket
realmente cambió el estado.
</para>
</warning>
<para>
No es necesario pasar cada matriz a
<function>socket_select</function>. En su lugar, se puede omitir y
usar una matriz vacía o &null;. No olvide también que esas matrices son
pasadas <emphasis>por referencia</emphasis> y serán modificadas después de
que <function>socket_select</function> devuelva.
</para>
<note>
<para>
A causa de una limitación en el Motor Zend actual no es posible pasar una
constante como &null; directamente como un parámetro a una función
que espera que este parámetro sea pasado por referencia. En su lugar use una
variable temporal o una expresión que su miembro más a la izquierda sea una
variable temporal:
<example>
<title>Usar &null; con <function>socket_select</function></title>
<programlisting role="php">
<![CDATA[
<?php
$e = NULL;
socket_select($r, $w, $e, 0);
?>
]]>
</programlisting>
</example>
</para>
</note>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
En caso de éxtio, <function>socket_select</function> devuelve el número de
recursos socket contenidos en las matrices modificadas, lo que puede ser cero si
el tiempo límite expira antes de que ocurra algo interesante. En caso de error se
devuelve &false;. El código de error se puede recuperar con
<function>socket_last_error</function>.
</para>
<note>
<para>
Asegúrese de usar el operador <literal>===</literal> cuando verifique un
error. Ya que <function>socket_select</function> puede devolver 0 la
comparación con <literal>==</literal> será evaluada a &true;:
<example>
<title>Comprender el resultado de <function>socket_select</function></title>
<programlisting role="php">
<![CDATA[
<?php
$e = NULL;
if (false === socket_select($r, $w, $e, 0)) {
echo "falló socket_select(), razón: " .
socket_strerror(socket_last_error()) . "\n";
}
?>
]]>
</programlisting>
</example>
</para>
</note>
</refsect1>
<refsect1 role="examples">
&reftitle.examples;
<para>
<example>
<title>Un ejemplo de <function>socket_select</function></title>
<programlisting role="php">
<![CDATA[
<?php
/* Preparar la matriz de lectura */
$read = array($socket1, $socket2);
$write = NULL;
$except = NULL;
$núm_sockets_cambiados = socket_select($read, $write, $except, 0);
if ($núm_sockets_cambiados === false) {
/* Manejo de errores */
} else if ($núm_sockets_cambiados > 0) {
/* Ocurrió algo interesante en al menos uno de los sockets */
}
?>
]]>
</programlisting>
</example>
</para>
</refsect1>
<refsect1 role="notes">
&reftitle.notes;
<note>
<para>
Tenga en cuenta que algunas implementaciones de sockets necesitan ser tratadas con
mucho cuidado. Unas cuantas reglas básicas:
<itemizedlist>
<listitem>
<simpara>
Debería siempre intentar usar <function>socket_select</function>
sin tiempo límite. Su programa no debería de hacer nada si no hay
información disponible. El código que depende de tiempos límite normalmente no es
portable y es difícil de depurar.
</simpara>
</listitem>
<listitem>
<simpara>
No se deben añadir recursos socket a ningún conjunto si no se pretende
verificar su resultado después de la llamada a <function>socket_select</function>,
y responder apropiadamente. Después de que <function>socket_select</function>
devuelva, todos los recursos socket en todas las matrices deben ser verificados. Cualquier
recurso socket que esté disponible para escritura debe ser escrito, y
cualquier recurso socket disponible para lectura debe ser leído.
</simpara>
</listitem>
<listitem>
<simpara>
Si lee/escribe en un socket devuelto en las matrices, tenga en cuenta que
no necesariamente leerán/escribirán la cantidad de información que
solicitó. Esté preparado para que incluso sea capaz de leer/escrir sólo un único
byte.
</simpara>
</listitem>
<listitem>
<simpara>
En la mayoría de las implementaciones de sockets es común que la única expcepción
capturada con la matriz <parameter>except</parameter> sea información
fuera de banda recibida en un socket.
</simpara>
</listitem>
</itemizedlist>
</para>
</note>
</refsect1>
<refsect1 role="seealso">
&reftitle.seealso;
<para>
<simplelist>
<member><function>socket_read</function></member>
<member><function>socket_write</function></member>
<member><function>socket_last_error</function></member>
<member><function>socket_strerror</function></member>
</simplelist>
</para>
</refsect1>
</refentry>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->