Files
2024-09-13 18:40:29 +01:00

665 lines
23 KiB
XML
Executable File

<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: e50e79746736dbdfbabe9bd3566793b3ddf38f58 Maintainer: yannick Status: ready -->
<!-- Reviewed: no -->
<refentry xml:id="function.socket-get-option" xmlns="http://docbook.org/ns/docbook">
<refnamediv>
<refname>socket_get_option</refname>
<refpurpose>Lit les options du socket</refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
<methodsynopsis>
<type class="union"><type>array</type><type>int</type><type>false</type></type><methodname>socket_get_option</methodname>
<methodparam><type>Socket</type><parameter>socket</parameter></methodparam>
<methodparam><type>int</type><parameter>level</parameter></methodparam>
<methodparam><type>int</type><parameter>option</parameter></methodparam>
</methodsynopsis>
<para>
<function>socket_get_option</function> récupère la valeur de l'option
spécifiée par le paramètre <parameter>option</parameter> pour le socket
spécifié par le paramètre <parameter>socket</parameter>.
</para>
</refsect1>
<refsect1 role="parameters">
&reftitle.parameters;
<para>
<variablelist>
<varlistentry>
<term><parameter>socket</parameter></term>
<listitem>
<para>
Une instance de <classname>Socket</classname> créée par
<function>socket_create</function> ou <function>socket_accept</function>.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>level</parameter></term>
<listitem>
<para>
Le paramètre <parameter>level</parameter> spécifie la couche de
protocole de l'option. Par exemple, pour connaître les options de
la couche socket, la valeur <constant>SOL_SOCKET</constant> du paramètre
<parameter>level</parameter> sera utilisée. Les autres degrés, comme
<constant>TCP</constant>, peuvent être utilisés en spécifiant le
numéro du protocole de cette couche. Les numéros de protocoles
peuvent être trouvés en utilisant la fonction
<function>getprotobyname</function>.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>option</parameter></term>
<listitem>
<table>
<title>Options disponibles pour les sockets</title>
<tgroup cols="3">
<thead>
<row>
<entry>Option</entry>
<entry>Description</entry>
<entry>Type</entry>
</row>
</thead>
<tbody>
<row>
<entry><constant>SO_DEBUG</constant></entry>
<entry>
Reporte si les informations de débogage sont enregistrées ou pas.
</entry>
<entry>
<type>int</type>
</entry>
</row>
<row>
<entry><constant>SO_BROADCAST</constant></entry>
<entry>
Reporte si la transmission des annonces globales est supportée ou pas.
</entry>
<entry>
<type>int</type>
</entry>
</row>
<row>
<entry><constant>SO_REUSEADDR</constant></entry>
<entry>
Indique si les adresses locales peuvent être réutilisées ou pas.
</entry>
<entry>
<type>int</type>
</entry>
</row>
<row>
<entry><constant>SO_REUSEPORT</constant></entry>
<entry>
Indique si les ports locaux peuvent être réutilisés.
</entry>
<entry>
<type>int</type>
</entry>
</row>
<row>
<entry><constant>SO_KEEPALIVE</constant></entry>
<entry>
Reporte si les connexions sont persistantes avec des transmissions
périodiques de messages ou pas. Si le socket connecté échoue en
réponse à ces messages, la connexion est interrompue et le processus
écrira sur ce socket une notification avec un signal SIGPIPE.
</entry>
<entry>
<type>int</type>
</entry>
</row>
<row>
<entry><constant>SO_LINGER</constant></entry>
<entry>
<para>
Reporte si le socket <parameter>socket</parameter> s'attarde sur
la fonction <function>socket_close</function> si des données sont
présentes ou pas. Par défaut, lorsque le socket est fermé,
<function>socket_close</function> tente d'envoyer toutes les
données qui ne l'ont pas encore été.
</para>
<para>
Si <varname>l_onoff</varname> ne vaut pas zéro et que
<varname>l_linger</varname> vaut zéro, toutes les données
qui n'ont pas encore été envoyées seront annulées et RST
(réinitialisation) sera envoyé dans le cas d'une connexion
orientée socket.
</para>
<para>
D'un autre côté, si <varname>l_onoff</varname> ne vaut pas zéro
et <varname>l_linger</varname> ne vaut pas zéro,
<function>socket_close</function> bloquera tant que les données
non envoyées ne le seront pas ou pendant le temps spécifié par
<varname>l_linger</varname>. Si le socket est non-bloquant,
<function>socket_close</function> échouera et retournera une
erreur.
</para>
</entry>
<entry>
<type>array</type>. Le tableau contiendra 2 clés :
<varname>l_onoff</varname> et
<varname>l_linger</varname>.
</entry>
</row>
<row>
<entry><constant>SO_OOBINLINE</constant></entry>
<entry>
Reporte si le socket <parameter>socket</parameter> part sur des données en
ligne out-of-band ou pas.
</entry>
<entry>
<type>int</type>
</entry>
</row>
<row>
<entry><constant>SO_SNDBUF</constant></entry>
<entry>
Reporte les informations sur la taille du tampon envoyé.
</entry>
<entry>
<type>int</type>
</entry>
</row>
<row>
<entry><constant>SO_RCVBUF</constant></entry>
<entry>
Reporte les informations sur la taille du tampon reçu.
</entry>
<entry>
<type>int</type>
</entry>
</row>
<row>
<entry><constant>SO_ERROR</constant></entry>
<entry>
Reporte les informations sur le statut de l'erreur et le vide.
</entry>
<entry>
<type>int</type> (ne peut être défini par la fonction
<function>socket_set_option</function>)
</entry>
</row>
<row>
<entry><constant>SO_TYPE</constant></entry>
<entry>
Reporte le type de le socket <parameter>socket</parameter> (e.g.
<constant>SOCK_STREAM</constant>).
</entry>
<entry>
<type>int</type> (ne peut être défini par la fonction
<function>socket_set_option</function>)
</entry>
</row>
<row>
<entry><constant>SO_DONTROUTE</constant></entry>
<entry>
Reporte si les messages sortants dévient les équipements standard de cheminement.
</entry>
<entry>
<type>int</type>
</entry>
</row>
<row>
<entry><constant>SO_RCVLOWAT</constant></entry>
<entry>
Reporte le nombre minimal d'octets au processus pour les opérations
entrantes sur le socket <parameter>socket</parameter>.
</entry>
<entry>
<type>int</type>
</entry>
</row>
<row>
<entry><constant>SO_RCVTIMEO</constant></entry>
<entry>
Reporte la valeur du délai d'exécution pour les opérations entrantes.
</entry>
<entry>
<type>array</type>. Le tableau contiendra 2 clés :
<varname>sec</varname> qui est la partie représentant les secondes
de la valeur du délai d'attente et <varname>usec</varname> qui est
la partie représentant les microsecondes.
</entry>
</row>
<row>
<entry><constant>SO_SNDTIMEO</constant></entry>
<entry>
Reporte la valeur du délai d'exécution spécifiant le temps maximal d'exécution
pour les fonctions sortantes bloquantes parce que la commande d'écoulement
empêche des données d'être envoyé.
</entry>
<entry>
<type>array</type>. Le tableau contiendra 2 clés :
<varname>sec</varname>qui est la partie représentant les secondes
de la valeur du délai d'attente et <varname>usec</varname> qui est
la partie représentant les microsecondes.
</entry>
</row>
<row>
<entry><constant>SO_SNDLOWAT</constant></entry>
<entry>
Reporte le nombre minimal d'octets au processus pour les opérations
sortantes sur le socket <parameter>socket</parameter>.
</entry>
<entry>
<type>int</type>
</entry>
</row>
<row>
<entry><constant>TCP_NODELAY</constant></entry>
<entry>
Indique si l'algorithme Nagle TCP est désactivé.
</entry>
<entry>
<type>int</type>
</entry>
</row>
<row>
<entry><constant>MCAST_JOIN_GROUP</constant></entry>
<entry>
Joint un groupe multicast.
</entry>
<entry>
Un tableau avec une clé <literal>"group"</literal>,
spécifiant une &string; avec les adresses multicast IPv4 ou IPv6
et une clé <literal>"interface"</literal>, spécifiant soit un
numéro d'interface (de type <type>int</type>), soit une
&string; avec le nom de l'interface, comme
<literal>"eth0"</literal>.
<literal>0</literal> peut être spécfié pour indiquer que l'interface
doit être sélectionné en utilisant les règles de routage (ne peut être
utilisé qu'avec la fonction <function>socket_set_option</function>).
</entry>
</row>
<row>
<entry><constant>MCAST_LEAVE_GROUP</constant></entry>
<entry>
Quitte un groupe multicast.
</entry>
<entry>
Un tableau. Voir la constante <constant>MCAST_JOIN_GROUP</constant>
pour plus d'informations (ne peut être utilisé qu'avec la fonction
<function>socket_set_option</function>).
</entry>
</row>
<row>
<entry><constant>MCAST_BLOCK_SOURCE</constant></entry>
<entry>
Paquets de bloc arrivant depuis une source spécifique
vers un groupe multicast spécifique, qui aura du être joint
auparavant.
</entry>
<entry>
Un tableau contenant les mêmes clés que celles de la constante
<constant>MCAST_JOIN_GROUP</constant>, avec une clé supplémentaire
<literal>source</literal>, lié à une chaîne de caractère spécifiant
une adresse IPv4 ou IPv6 de la source à bloquer
(ne peut être utilisé qu'avec la fonction
<function>socket_set_option</function>).
</entry>
</row>
<row>
<entry><constant>MCAST_UNBLOCK_SOURCE</constant></entry>
<entry>
Débloque (recommence à recevoir) les paquets arrivant depuis
une source spécifique vers un groupe multicast spécifique,
qui aura dû être joins auparavant.
</entry>
<entry>
Un tableau au même format que celui de la constante
<constant>MCAST_BLOCK_SOURCE</constant>
(ne peut être utilisé qu'avec la fonction
<function>socket_set_option</function>).
</entry>
</row>
<row>
<entry><constant>MCAST_JOIN_SOURCE_GROUP</constant></entry>
<entry>
Reçoit des paquets destinés à un groupe multicast spécifique
dont l'adresse source correspond à une valeur spécifique.
</entry>
<entry>
Un tableau au même format que celui de la constante
<constant>MCAST_BLOCK_SOURCE</constant>
(ne peut être utilisé qu'avec la fonction
<function>socket_set_option</function>).
</entry>
</row>
<row>
<entry><constant>MCAST_LEAVE_SOURCE_GROUP</constant></entry>
<entry>
Arrête de recevoir des paquets destinés à un groupe multicast
spécifique dont l'adresse source correspond à une valeur spécifique.
</entry>
<entry>
Un tableau au même format que celui de la constante
<constant>MCAST_BLOCK_SOURCE</constant>
(ne peut être utilisé qu'avec la fonction
<function>socket_set_option</function>).
</entry>
</row>
<row>
<entry><constant>IP_MULTICAST_IF</constant></entry>
<entry>
L'interface de sortie pour les paquets multicast IPv4.
</entry>
<entry>
Soit un entier spécifiant le numéro de l'interface, soit une
&string; représentant le nom de l'interface, par exemple,
<literal>eth0</literal>. La valeur <type>0</type>
peut être utilisé pour indiquer la table de routage à utiliser
dans la sélection de l'interface. La fonction
<function>socket_get_option</function> retourne un index d'interface.
Notez que, contrairement à l'API C, cette option ne prend pas
comme argument une adresse IP. Ceci élimine la différence d'interface
entre les constantes <constant>IP_MULTICAST_IF</constant> et
<constant>IPV6_MULTICAST_IF</constant>.
</entry>
</row>
<row>
<entry><constant>IPV6_MULTICAST_IF</constant></entry>
<entry>
L'interface de sortie pour les paquets multicast IPv6.
</entry>
<entry>
Identique à la constante <constant>IP_MULTICAST_IF</constant>.
</entry>
</row>
<row>
<entry><constant>IP_MULTICAST_LOOP</constant></entry>
<entry>
La politique de la boucle locale multicast pour les paquets
IPv4 active ou désactive le bouclage des multidiffusions sortantes,
qui doivent avoir été jointes auparavant. L'effet diffère cependant
selon qu'il s'applique à Unix ou à Windows, le premier étant sur le
chemin de réception tandis que le second sur le chemin d'envoi.
</entry>
<entry>
Un entier (soit <literal>0</literal>, soit <literal>1</literal>).
Pour la fonction <function>socket_set_option</function>,
n'importe quelle valeur sera acceptée et sera convertie
en un booléen suivant les règles habituelles de PHP.
</entry>
</row>
<row>
<entry><constant>IPV6_MULTICAST_LOOP</constant></entry>
<entry>
Identique à la constante <constant>IP_MULTICAST_LOOP</constant>,
mais pour l'IPv6.
</entry>
<entry>
Un entier. Voir la constante <constant>IP_MULTICAST_LOOP</constant>.
</entry>
</row>
<row>
<entry><constant>IP_MULTICAST_TTL</constant></entry>
<entry>
La durée de vie des paquets sortants multicast IPv4.
Ce doit être une valeur comprise entre 0 (ne pas quitter
l'interface) et 255. Par défaut, la valeur est à 1 (seul
le réseau local est atteint).
</entry>
<entry>
Un entier entre 0 et 255.
</entry>
</row>
<row>
<entry><constant>IPV6_MULTICAST_HOPS</constant></entry>
<entry>
Identique à la constante <constant>IP_MULTICAST_TTL</constant>,
mais pour les paquets IPv6. La valeur -1 est également acceptée,
signifiant que la route par défaut doit être utilisée.
</entry>
<entry>
Un entier compris entre -1 et 255.
</entry>
</row>
<row>
<entry><constant>SO_MARK</constant></entry>
<entry>
Définit un identifiant sur le socket pour le but de filtrer
les packets sur Linux.
</entry>
<entry>
<type>int</type>
</entry>
</row>
<row>
<entry><constant>SO_ACCEPTFILTER</constant></entry>
<entry>
Ajoute un filtre d'acceptation sur le socket écouté (FreeBSD/NetBSD).
Un module kernel de filtre d'acceptation doit d'abord être chargé
sur FreeBSD (e.g. accf_http).
</entry>
<entry>
<type>string</type> name of the filter (length 15 max).
</entry>
</row>
<row>
<entry><constant>SO_USER_COOKIE</constant></entry>
<entry>
Définit un identifiant sur le socket pour le but de filtrer
les packets sur FreeBSD.
</entry>
<entry>
<type>int</type>
</entry>
</row>
<row>
<entry><constant>SO_RTABLE</constant></entry>
<entry>
Définit un identifiant sur le socket pour le but de filtrer
les packets sur OpenBSD.
</entry>
<entry>
<type>int</type>
</entry>
</row>
<row>
<entry><constant>SO_DONTTRUNC</constant></entry>
<entry>
Conserve les données non lues.
</entry>
<entry>
<type>int</type>
</entry>
</row>
<row>
<entry><constant>SO_WANTMORE</constant></entry>
<entry>
Fournit un indice quand plus de données sont prêtes.
</entry>
<entry>
<type>int</type>
</entry>
</row>
<row>
<entry><constant>TCP_DEFER_ACCEPT</constant></entry>
<entry>
Ne pas notifier un socket qui écoute tant que les données ne sont pas prêtes.
</entry>
<entry>
<type>int</type>
</entry>
</row>
<row>
<entry><constant>SO_INCOMING_CPU</constant></entry>
<entry>
Récupère/Définit l'affinité du cpu pour un socket.
</entry>
<entry>
<type>int</type>
</entry>
</row>
<row>
<entry><constant>SO_MEMINFO</constant></entry>
<entry>
Récupère toute les meminfo d'un socket.
</entry>
<entry>
<type>int</type>
</entry>
</row>
<row>
<entry><constant>SO_BPF_EXTENSIONS</constant></entry>
<entry>
Récupère les extensions BPF supportées par le kernel à attacher à un socket.
</entry>
<entry>
<type>int</type>
</entry>
</row>
<row>
<entry><constant>SO_SETFIB</constant></entry>
<entry>
Définit la table de route (FIB) d'un socket. (FreeBSD uniquement)
</entry>
<entry>
<type>int</type>
</entry>
</row>
<row>
<entry><constant>SOL_FILTER</constant></entry>
<entry>
Filtres attribués à un socket. (Solaris/Illumos uniquement)
</entry>
<entry>
<type>int</type>
</entry>
</row>
<row>
<entry><constant>TCP_KEEPCNT</constant></entry>
<entry>
Définit le nombre maximal de sondes keepalive TCP devrait envoyer avant de lâcher la connexion.
</entry>
<entry>
<type>int</type>
</entry>
</row>
<row>
<entry><constant>TCP_KEEPIDLE</constant></entry>
<entry>
Définit le temps que la connexion doit rester inactive.
</entry>
<entry>
<type>int</type>
</entry>
</row>
<row>
<entry><constant>TCP_KEEPINTVL</constant></entry>
<entry>
Définit le temps entre les sondes keepalive individuelles.
</entry>
<entry>
<type>int</type>
</entry>
</row>
<row>
<entry><constant>TCP_KEEPALIVE</constant></entry>
<entry>
Définit le temps que la connexion doit rester inactive. (macOS uniquement)
</entry>
<entry>
<type>int</type>
</entry>
</row>
<row>
<entry><constant>TCP_NOTSENT_LOWAT</constant></entry>
<entry>
Définit le nombre limite de données non envoyées dans la file d'attente d'écriture
par le flux de socket. (Linux uniquement)
</entry>
<entry>
<type>int</type>
</entry>
</row>
</tbody>
</tgroup>
</table>
</listitem>
</varlistentry>
</variablelist>
</para>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
Retourne la valeur de l'option fournie, &return.falseforfailure;.
</para>
</refsect1>
<refsect1 role="changelog">
&reftitle.changelog;
<informaltable>
<tgroup cols="2">
<thead>
<row>
<entry>&Version;</entry>
<entry>&Description;</entry>
</row>
</thead>
<tbody>
&sockets.changelog.socket-param;
</tbody>
</tgroup>
</informaltable>
</refsect1>
<refsect1 role="examples">
&reftitle.examples;
<para>
<example>
<title>Exemple avec <function>socket_get_option</function></title>
<programlisting role="php">
<![CDATA[
<?php
$socket = socket_create_listen(1223);
$linger = array('l_linger' => 1, 'l_onoff' => 1);
socket_set_option($socket, SOL_SOCKET, SO_LINGER, $linger);
var_dump(socket_get_option($socket, SOL_SOCKET, SO_REUSEADDR));
?>
]]>
</programlisting>
</example>
</para>
</refsect1>
<refsect1 role="seealso">
&reftitle.seealso;
<para>
<simplelist>
<member><function>socket_create_listen</function></member>
<member><function>socket_set_option</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
-->