mirror of
https://github.com/php/doc-es.git
synced 2026-03-25 16:02:13 +01:00
Use consistent line terminator. git-svn-id: https://svn.php.net/repository/phpdoc/es/trunk@317671 c90b9560-bf6c-de11-be94-00142212c4b1
258 lines
8.7 KiB
XML
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
|
|
-->
|