Ces fonctions Socket communiquent directement avec le protocole Internet pour envoyer des informations. Comparés aux ruisseaux de Fopensock, ils fonctionnent à un niveau relativement faible. Habituellement, ils encapsulent des fonctions C et portent des noms similaires. Si vous avez de l'expérience avec la programmation de sockets en C, vous serez très à l'aise avec ces fonctions. Nous ne discuterons pas ici de la programmation des sockets en détail.
Utilisez ces fonctions pour résoudre des problèmes difficiles que les fonctions de niveau supérieur ne peuvent pas résoudre. L'utilisation de ces fonctions peut obtenir des fonctions similaires à fopen. Vous pouvez avoir de nombreuses façons d'implémenter des fonctions de socket, telles que le démon Internet implémenté à l'aide de CLI (Command-line Interface) en PHP.
ressource socket_accept(ressource socket)
Du côté serveur de votre script, utilisez socket_accept pour accepter une connexion entrante. Vous devez d'abord créer un socket, le lier à un nom et le configurer pour qu'il écoute sur un port. En mode bloc, socket_accept générera une connexion acceptée unique. En mode non-bloc, il renvoie false si aucune connexion n'est établie. De plus, lorsque vous disposez d'une nouvelle ressource socket, vous pouvez effectuer des opérations de lecture et d'écriture.
Ci-dessous, nous allons démontrer un simple serveur d'écho. Il s'exécute sous la CLI (ligne de commande) et attend les connexions client sur le port 12345.
socket_accepter
<?php
set_time_limit(0);
//crée la socket
if(($socket = socket_create(AF_INET, SOCK_STREAM, 0)) < 0){
print("Impossible de créer le socket : " . socket_strerror(socket_last_error()) . "n");
}
//le lier à l'adresse et au port donnés
if(($error = socket_bind($socket, gethostbyname($_SERVER['HOSTNAME']), 12345)) < 0){
print("Impossible de lier le socket : " . socket_strerror(socket_last_error()) . "n");
}
si(($erreur = socket_listen($socket, 5)) < 0){
print("Impossible de lister sur le socket : " .
socket_strerror(socket_last_error()) .
}
pendant que(VRAI){
//attend la connexion
si(($accepter = socket_accepter($socket)) < 0){
print("Erreur lors de la lecture : " . socket_strerror($message) . "n");
casser;
}
//envoyer un message de bienvenue
socket_write($accept, "Connexion acceptéen");
print(date('Ymd H:i:s') . " STATUT : Connexion acceptéen");
ob_flush();
pendant que(VRAI){
//lire la ligne du client
if(FALSE === ($line = socket_read($accept, 1024))){
print("Impossible de lire depuis le socket : " .
socket_strerror(socket_last_error()) .
pause 2 ;
}
if( !@socket_write($accept , "ECHO : $line")){
print(date('Ymd H:i:s') . " STATUT : Connexion interrompuen");
casser;
}
print(date('Ymd H:i:s') . " LIRE : $line");
ob_flush();
}
socket_close($accepter);
}
?>
bool socket_bind (socket de ressource, adresse de chaîne, port entier)
Ce socket_bind() lie une ressource socket à une adresse. Cette socket doit être une ressource renvoyée par la fonction socket_create(). Cette adresse doit être une adresse IP ou un chemin vers un socket Unix. S'il s'agit d'un socket fonctionnant sur Internet, vous devez également fournir un port.
socket_clear_error (socket de ressources)
Cette fonction peut effacer les erreurs pour le socket spécifié. Si aucun paramètre n'est spécifié, toutes les erreurs de socket seront effacées.
socket_close (socket de ressources)
La fonction socket_close ferme un socket et efface les ressources mémoire occupées par le socket.
booléen socket_connect (socket de ressource, adresse de chaîne, port entier)
Cette fonction crée une connexion client à un port ou un socket. Vous devez fournir un socket généré par socket_create. Le paramètre d'adresse doit être le chemin d'accès à un socket ou à une adresse IP. Si c'est ce dernier cas, il doit également être suivi d'un numéro de port numérique.
L'exemple suivant montre le processus de connexion au serveur de jeu et d'obtention d'informations à l'aide du protocole UDP.
socket_connect
<?php
//crée une socket UDP
if(($socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP)) < 0){
print("Impossible de créer le socket : " .
socket_strerror(socket_last_error()) .
}
//timeout après 5 secondes
socket_set_option($socket, SOL_SOCKET,
SO_RCVTIMEO, array('sec'=>5,'usec'=>0));
//se connecte au serveur maître RtCW
if(!socket_connect($socket, 'wolfmaster.idsoftware.com', 27950)){
print("Connexion impossible : " .
socket_strerror(socket_last_error()) .
}
//envoyer une requête pour les serveurs
socket_write($socket, "xFFxFFxFFxFFgetserversx00");
//récupère les serveurs
$serveur = tableau();
while(FALSE !== ($line = @socket_read($socket, 4096))){
//analyser les données
pour($i=22; ($i+5) < strlen($line); $i += 7){
$ip = ord(substr($line, $i+1, 1)) '.'
ord(substr($ligne, $i+2, 1)) '.'
ord(substr($ligne, $i+3, 1)) '.'
ord(substr($line, $i+4, 1));
$port = (ord(substr($line, $i+5, 1)) * 256) +
ord(substr($line, $i+6, 1));
$server[] = array('ip'=>$ip, 'port'=>$port);
}
}
print("<h1>" . count($server) . " Serveurs</h1>n");
//boucle sur les serveurs, obtention du statut
foreach($serveur en tant que $s){
print("<h1>{$s['ip']}:{$s['port']}</h1>n");
//se connecter au serveur RtCW
if(!socket_connect($socket, $s['ip'], $s['port'])){
print("<p>n" .
socket_strerror(socket_last_error()) .
"n</p>n");
continuer;
}
//envoyer une demande de statut
socket_write($socket, "xFFxFFxFFxFFgetstatusx00");
//Obtenir le statut du serveur
if(FALSE === ($line = @socket_read($socket, 1024))){
print("<p>n" .
socket_strerror(socket_last_error()) .
"n</p>n");
continuer;
}
$part = exploser("n", $line);
//les paramètres sont sur la deuxième ligne séparés par des barres obliques inverses
$setting = éclater("\", $part[1]);
print("<h2>Configuration</h2>n");
print("<p>n");
pour($s=1; $s < nombre($setting); $s += 2){
print("tt{$setting[$s]} = {$setting[$s+1]}<br>n");
}
print("</p>n");
print("<h2>Joueurs</h2>n");
$lastPlayer = count($part) - 1 ;
pour($p=2; $p < $lastPlayer; $p++){
$player = exploser(" ", $part[$p]);
print("{$player[2]} Score={$player[0]} " .
"Ping={$player[1]}<br>n");
}
print("</p>n");
ob_flush();
}
print("</table>n");
socket_close($socket);
?>
ressource socket_create (famille entière, type de socket entier, protocole entier)
socket_create initialise une structure de socket. Le premier paramètre est une famille de protocoles, ou domaine. Vous devez utiliser AF_INET pour spécifier une connexion Internet ou AF_UNIX pour spécifier une connexion socket Unix. Le deuxième paramètre est un type de socket, que vous pouvez choisir dans le tableau ci-dessous. Généralement, utilisez SOCK_STREAM pour utiliser le protocole TCP et le protocole UDP pour utiliser SOCK_DGRAM. Le troisième paramètre spécifie un protocole. Utilisez SOL_TCP ou SOL_UDP pour correspondre respectivement aux protocoles TCP et UDP. Une autre option est que vous pouvez utiliser la fonction getprotobyname pour gérer cela.
Description de la constante du type de socket
SOCK_DGRAM adresse automatiquement le socket de paquet
Interface du protocole SOCK_RAW RAW
SOCK_RDM échange de messages fiable
Socket de paquets de données séquentielles SOCK_SEQPACKET
Prise de flux SOCK_STREAM
ressource socket_create_listen (port entier, backlog entier)
L'utilisation de socket_create_listen est une méthode plus simple que socket_create pour générer un socket à écouter. Le socket généré écoutera le port spécifié et le paramètre facultatif backlog consiste à définir le nombre maximum de connexions autorisées.
booléen socket_create_pair (famille entière, type de socket entier, protocole entier, descripteurs de tableau)
La fonction socket_create_pair génère une paire de connexions socket. Tout d'abord, les trois premiers paramètres sont une description d'un socket_create. Le paramètre handles est un tableau contenant deux ressources socket. Cette fonction est une encapsulation de la fonction socketpair en C.
socket_create_pair
<?php
if(!socket_create_pair(AF_UNIX, SOCK_STREAM, 0, $socket)){
print("Impossible de créer des sockets !n");
sortie();
}
$enfant = pcntl_fork();
si($enfant == -1){
print("Impossible de forker !n");
sortie();
}
elseif($enfant > 0){
//mère
socket_close($socket[0]);
print("Parent : en attente d'un messagen");
$message = socket_read($socket[1], 1024, PHP_NORMAL_READ);
print("Parent : message reçu--$messagen");
socket_write($socket[1], "Bonjour, processus enfant !n");
pcntl_waitpid($enfant, $status);
}autre{
//enfant
socket_close($socket[1]);
socket_write($socket[0], "Bonjour, processus parent !n");
print("Enfant : en attente d'un messagen");
$message = socket_read($socket[0], 1024, PHP_NORMAL_READ);
print("Enfant : message reçu--$messagen");
sortie(0);
}
?>
valeur socket_get_option (socket de ressources, niveau entier, option entière)
La fonction socket_get_option renvoie une valeur ajoutée répertoriée dans le tableau suivant. Vous devez fournir une ressource socket générée par socket_create et un niveau. Ce niveau de socket obtenu peut être déterminé à l’aide de SOL_SOCKET. Vous pouvez également utiliser un protocole tel que SOL_TCP pour représenter un protocole TCP. Ces options peuvent être définies par socket_set_option.
socket_get_options
<?php
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
print('SO_BROADCAST:' .
socket_get_option($socket, SOL_SOCKET,
SO_BROADCAST) . "<br>n");
print('SO_DEBUG:' .
socket_get_option($socket, SOL_SOCKET,
SO_DEBUG) . "<br>n");
print('SO_DONTROUTE : ' .
socket_get_option($socket, SOL_SOCKET,
SO_DONTROUTE) . "<br>n");
print('SO_ERROR : ' .
socket_get_option($socket, SOL_SOCKET,
SO_ERROR) . "<br>n");
print('SO_KEEPALIVE:' .
socket_get_option($socket, SOL_SOCKET,
SO_KEEPALIVE) . "<br>n");
print('SO_LINGER: ' .
print_r(socket_get_option($socket, SOL_SOCKET,
SO_LINGER), VRAI) .
print('SO_OOBINLINE:' .
socket_get_option($socket, SOL_SOCKET,
SO_OOBINLINE) . "<br>n");
print('SO_RCVBUF:' .
socket_get_option($socket, SOL_SOCKET,
SO_RCVBUF) . "<br>n");
print('SO_RCVLOWAT:' .
socket_get_option($socket, SOL_SOCKET,
SO_RCVLOWAT) . "<br>n");
print('SO_RCVTIMEO:' .
print_r(socket_get_option($socket, SOL_SOCKET,
SO_RCVTIMEO), VRAI) .
print('SO_REUSEADDR:' .
socket_get_option($socket, SOL_SOCKET,
SO_REUSEADDR) . "<br>n");
print('SO_SNDBUF:' .
socket_get_option($socket, SOL_SOCKET,
SO_SNDBUF) . "<br>n");
print('SO_SNDLOWAT:' .
socket_get_option($socket, SOL_SOCKET,
SO_SNDLOWAT) . "<br>n");
print('SO_SNDTIMEO:' .
print_r(socket_get_option($socket, SOL_SOCKET,
SO_SNDTIMEO), VRAI) .
print('SO_TYPE:' .
socket_get_option($socket, SOL_SOCKET,
SO_TYPE) . "<br>n");
?>
Description des options du tableau des options de socket
SO_BROADCAST permet aux sockets adressés automatiquement d'envoyer et de recevoir des paquets de diffusion
SO_DEBUG active la fonction de débogage du socket. Seul root a l'autorisation d'activer cette option.
SO_DONTROUTE n'accepte pas le routage des paquets via la passerelle
SO_ERROR Récupère et efface la dernière erreur de socket. Il n'est peut-être pas nécessaire de définir cette option.
SO_KEEPALIVE Ouvrir un message qui reste actif
SO_LINGER Socket_colse et socket_shutdown abandonnent le délai d'envoi du message, cette option utilise un tableau, comprenant les deux clés l_onoff et l_linger.
SO_OOBINLINE insère les données directement dans le tampon de réception
SO_RCVBUF limite le nombre maximum d'octets pouvant être mis en mémoire tampon
SO_RCVLOWAT retarde en acceptant un minimum de données
SO_RCVTIMEO Retarde le signalement d'un délai d'attente d'acceptation, en utilisant deux clés du tableau : sec et usec
SO_REUSEADDR permet la réutilisation des adresses locales
SO_SNDBUF limite le nombre maximum d'octets du tampon d'envoi
SO_SNDLOWAT retarde l'envoi des données à ce protocole tout en acceptant un minimum d'octets
SO_SNDTIMEO Retarde le signalement des erreurs de délai d'attente lorsqu'un expéditeur dépasse un délai d'attente. Cette option utilise les clés du tableau : sec et usec
SO_TYPE Obtient le type de socket. Cette option n'a peut-être pas besoin d'être définie.
boolean socket_getpeername (socket de ressource, adresse de chaîne, port entier).
socket_getpeername obtient l'adresse et le port d'une connexion spécifiée. Si la connexion est un socket Unix, le chemin d'accès au système de fichiers sera renvoyé.
booléen socket_getsockname (socket de ressource, adresse de chaîne, port entier)
socket_getsockname place un nom dans le socket et ajoute les paramètres d'adresse et de port. Renvoie false en cas d'échec.
(Je ne connais pas grand chose aux fonctions socket_iovec_* ci-dessous, donc je n'ose pas les traduire au hasard, donc je garde le texte original)
booléen socket_iovec_add (iovecteur de ressource, longueur entière)
La fonction socket_iovec_add ajoute un vecteur d'E/S au tableau scatter/gather.
ressource socket_iovec_alloc (nombre entier, …)
La fonction socket_iovec_alloc renvoie une ressource pour gérer une collection de vecteurs d'E/S. Le premier argument spécifie le nombre de vecteurs. Les arguments suivants spécifient la longueur de chaque vecteur.
booléen socket_iovec_delete (iovecteur de ressource, position entière)
La fonction socket_iovec_delete supprime le vecteur d'E/S à la position donnée.
chaîne socket_iovec_fetch (ressource iovector, position entière)
La fonction socket_iovec_fetch renvoie la valeur du vecteur spécifié dans la ressource vectorielle d'E/S.
booléen socket_iovec_free (ressource iovector)
La fonction socket_iovec_free libère la mémoire utilisée pour une ressource vectorielle d'E/S.
booléen socket_iovec_set (iovecteur de ressource, position entière, valeur de chaîne)
Le socket_iovec_set définit la valeur du vecteur d'E/S à la position donnée.
entier socket_last_error (socket de ressource)
La fonction socket_last_error renvoie la dernière erreur générée par n'importe quelle fonction socket dans l'opération. Vous avez peut-être défini l'option socket de la ressource socket sur la connexion spécifiée dans la fonction ci-dessus. Le tableau suivant répertorie les codes d'erreur renvoyés. Vous pouvez également utiliser la fonction soclet_strerror pour obtenir des erreurs détaillées. Utilisez la fonction socket_clear_error pour effacer les erreurs de socket.
Description des constantes du tableau des codes d'erreur de socket
Liste de paramètres SOCKET_E2BIG trop longue
SOCKET_EACCES n'a aucune autorisation
L'adresse SOCKET_EADDRINUSE est déjà utilisée
SOCKET_EADDRNOTAVAIL ne peut pas résoudre l'adresse demandée
Erreur de diffusion (publicité) SOCKET_EADV
SOCKET_EAFNOSUPPORT Protocole non pris en charge par la famille d'adresses
La ressource SOCKET_EAGAIN est temporairement indisponible
L'opération SOCKET_EALREADY est déjà en cours d'exécution
SOCKET_EBADE Échange invalide
SOCKET_EBADF mauvais descripteur de fichier
État d'erreur du descripteur de fichier SOCKET_EBADFD
Message d'erreur SOCKET_EBADMSG
SOCKET_EBADR Description de la demande invalide
SOCKET_EBADRQC Code de demande invalide
SOCKET_EBADSLT Emplacement d'opération non valide
SOCKET_EBUSY Le pilote ou la ressource est occupé
Numéro de canal SOCKET_ECHRNG hors plage
SOCKET_ECOMM Envoyer une erreur de communication
SOCKET_ECONNABORTED Interruption du trafic pour des raisons logicielles
Connexion SOCKET_ECONNREFUSED refusée
SOCKET_ECONNRESET La connexion est réinitialisée par le même socket
SOCKET_EDESTADDRREQ doit exiger l'adresse de destination
Quota de disque SOCKET_EDQUOT dépassé
Le fichier SOCKET_EEXIST existe déjà
SOCKET_EFAULT mauvaise adresse
L'hôte SOCKET_EHOSTDOWN est en panne
SOCKET_EHOSTUNREACH n'est pas acheminé vers l'hôte
SOCKET_EIDRM indique que l'ID a été supprimé
L'opération SOCKET_EINPROGRESS est en cours d'exécution
Appel système SOCKET_EINTR bloqué
Paramètre SOCKET_EINVAL non valide
Erreur d'entrée/sortie SOCKET_EIO
Le terminal de transmission SOCKET_EISCONN a été connecté
SOCKET_EISDIR est un répertoire
SOCKET_EISNAM est un fichier de type spécifié
SOCKET_EL2HLT Niveau 2 abandonné
SOCKET_EL2NSYNC Niveau 2 désynchronisé
SOCKET_EL3HLT Niveau 3 abandonné
SOCKET_EL3RST Le niveau 3 est réinitialisé
Le numéro de connexion SOCKET_ELNRNG est hors plage
SOCKET_ELOOP Trop de niveaux de liens symboliques
SOCKET_EMEDIUMTYPE Type de média incorrect (type intermédiaire)
SOCKET_EMFILE Trop de fichiers ouverts
SOCKET_EMLINK Trop de connexions
Le message SOCKET_EMSGSIZE est trop long
SOCKET_EMULTIHOP Trop de tentatives
Nom de fichier SOCKET_ENAMETOOLONG trop long
Le réseau SOCKET_ENETDOWN est en panne
SOCKET_ENETRESET Le réseau a été interrompu et la connexion a été réinitialisée.
SOCKET_ENETUNREACHLe réseau est inaccessible
SOCKET_ENFILE Trop de fichiers ouverts dans le système
SOCKET_ENOANO Pas de pôle positif
SOCKET_ENOBUFS Aucun espace de cache disponible
SOCKET_ENOCSI Aucune structure CSI disponible
SOCKET_ENODATA Aucune donnée disponible
SOCKET_ENODEV Aucun pilote de ce type
SOCKET_ENOENT Aucun fichier ou répertoire de ce type
SOCKET_ENOLCK Aucun verrouillage d'enregistrement disponible
Connexion SOCKET_ENOLINK à un service existant
SOCKET_ENOMEDIUM Aucun support trouvé
SOCKET_ENOMEM ne peut pas allouer de mémoire
SOCKET_ENOMSG Aucun type de message spécifié
L'appareil SOCKET_ENONET n'est pas sur le réseau
Le protocole SOCKET_ENOPROTOOPT n'est pas disponible
SOCKET_ENOSPC Pas d'espace dans le lecteur
SOCKET_ENOSR a dépassé la ressource de flux
Le pilote SOCKET_ENOSTR n'est pas un flux
La fonction SOCKET_ENOSYS n'est pas exécutée
Le pilote de bloc SOCKET_ENOTBLK est requis
SOCKET_ENOTCONN Le terminal de transmission n'est pas connecté
SOCKET_ENOTDIR n'a pas de répertoire
Le répertoire SOCKET_ENOTEMPTY est vide
SOCKET_ENOTSOCK Opération de socket sur un non-socket
SOCKET_ENOTTY Contrôleur IO incompatible
Le nom SOCKET_ENOTUNIQ n'est pas unique sur le réseau
SOCKET_ENXIO Aucun pilote ni adresse de ce type
L'opération SOCKET_EOPNOTSUPP n'est pas prise en charge
Opération SOCKET_EPERM non autorisée
La famille de protocoles SOCKET_EPFNOSUPPORT n'est pas prise en charge
Canal défaillant SOCKET_EPIPE
Erreur de protocole SOCKET_EPROTO
Le protocole SOCKET_EPROTONOSUPPORT n'est pas pris en charge
SOCKET_EPROTOTYPE Le type d'erreur de protocole sur le Socket
L'adresse distante SOCKET_EREMCHG a changé
L'objet SOCKET_EREMOTE est distant
Erreur d'E/S distante SOCKET_EREMOTEIO
SOCKET_ERESTART L'appel système interrompu sera relancé
Le système de fichiers SOCKET_EROFS est en lecture seule
SOCKET_ESHUTDOWN. L’interruption du point de terminaison de transmission ne peut pas être envoyée.
SOCKET_ESOCKTNOSUPPORT Le type de socket n'est pas pris en charge
SOCKET_ESPIPE recherche illégale
Erreur de canal de flux SOCKET_ESTRPIPE
Le délai SOCKET_ETIME expire
Délai d'expiration de la connexion SOCKET_ETIMEDOUT
SOCKET_ETOOMANYREFS Trop de connexions à combiner
SOCKET_EUNATCH Impossible d'attacher le pilote de protocole
SOCKET_EUSERS Trop d'utilisateurs
La ressource SOCKET_EWOULDBLOCK est temporairement indisponible
SOCKET_EXDEV Connexion entre lecteurs non valide
L'échange SOCKET_EXFULL est complet
booléen socket_listen (socket de ressources, backlog entier)
Cette fonction socket_listen attend les connexions du client. Le paramètre backlog définit le nombre maximum de files d'attente autorisées à attendre les connexions.
string socket_read (socket de ressource, longueur entière, type entier)
La fonction socket_read lit les octets spécifiés à partir d'un socket spécifique et renvoie false en cas d'erreur. Par défaut, le mode de lecture binaire sécurisé est utilisé. Vous pouvez modifier le mode de lecture en définissant en externe le paramètre type sur PHP_BINARY_READ. Vous pouvez également définir le type sur PHP_NORMAL_READ.
booléen socket_readv (socket de ressource, iovecteur de ressource)
La fonction socket_readv insère les données lues dans la ressource iovector.
entier socket_recv (socket de ressources, tampon de chaîne, longueur entière, indicateurs entiers)
La fonction socket_recv lit les données et les insère dans le tampon. Le paramètre Longueur définit le nombre maximum d'octets à lire et le paramètre indicateur peut utiliser MSG_OOB ou MSG_PEEK. La fonction renvoie le nombre d'octets lus.
entier socket_recvfrom (socket de ressources, tampon de chaîne, longueur entière, hôte de chaîne, port entier)
La fonction socket_frcvfrom lit les données et les insère dans le cache. Le paramètre Longueur définit le nombre maximum d'octets autorisés à être reçus. Le paramètre flags peut être défini sur MSG_OOB ou MSG_PEEK. PHP définit les paramètres de l'hôte et du port sur les valeurs appropriées pour pouvoir obtenir les données envoyées depuis l'hôte.
boolean socket_recvmsg (socket de ressource, iovecteur de ressource, contrôle de tableau, longueur entière, indicateurs entiers, hôte de chaîne, port entier)
La fonction socket_recvmsg lit les données du socket et les insère dans une ressource vectorielle d'E/S. Le paramètre de contrôle de configuration PHP est un tableau associatif avec trois éléments : cmsg_level, cmsg_type et cmsg_data. Le paramètre Longueur est un paramètre de longueur attaché aux données concernant l'obtention des données. Le paramètre Flags définit les valeurs autorisées et les valeurs de retour. Au moment de la rédaction, PHP ne peut pas exécuter toutes les constantes de sortie. PHP définit les paramètres d'hôte et de port sur les valeurs appropriées afin d'obtenir les données envoyées depuis l'hôte distant.
(La fonction Socket_slect n'est pas traduite car j'ai peur que les mots ne transmettent pas le sens)
entier socket_select (lecture du tableau, écriture du tableau, exception du tableau, délai d'attente_secondes entier, délai d'attente_microsecondes entier)
La fonction socket_select attend les modifications apportées aux sockets. PHP surveille les sockets données dans le tableau de lecture pour les nouvelles données entrantes. PHP surveille les flux donnés dans le tableau d'écriture pour être prêt à accepter plus de données. PHP surveille les flux donnés dans l'argument d'exception. pour les erreurs. Si le nombre de secondes spécifié dans l'argument timeout_seconds est réussi, la fonction renvoie l'argument facultatif timeout_microseconds pour spécifier un délai d'attente inférieur à 1 seconde.
La fonction socket_select renvoie le nombre de sockets qui ont changé ou FALSE si une erreur s'est produite. Si l'appel a expiré, cette fonction renvoie également zéro.
Si vous n'avez pas de sockets d'un type particulier à surveiller, vous pouvez transmettre un tableau vide ou une variable définie sur NULL.
entier socket_send (socket de ressources, tampon de chaîne, longueur entière, indicateurs entiers)
La fonction socket_send écrit les données dans le tampon puis les insère dans la connexion. Vous devez spécifier un nombre maximum d'octets accessibles en écriture pour le tampon. Vous pouvez également définir le paramètre flags sur vide ou sur l'une des constantes combinées suivantes : MSG_DONTROUTE et MSG_OOB. La fonction se termine et renvoie le nombre d'octets écrits, sinon elle renvoie false.
boolean socket_sendmsg (socket de ressource, iovecteur de ressource, indicateurs entiers, adresse de chaîne, port entier)
socket_sendmsg tente d'envoyer des données à un socket. Il convient aux prises sans connexion. Le paramètre Iovector est une ressource générée par la fonction socket_iovec_alloc. Vous devez spécifier le paramètre flags comme : NULL, MSG_DONTROUTE, MSG_OOB ou deux constantes combinées. Vous devez spécifier une adresse et un port pour les requêtes Internet.
La fonction Socket_sendmsg renvoie true lors de l'envoi de données, mais il n'y a aucune garantie que les données arriveront.
entier socket_sendto (socket de ressources, tampon de chaîne, longueur entière, indicateurs entiers, adresse de chaîne, port entier)
La fonction socket_sendto tente d'écrire des données dans le tampon et de les envoyer à un socket. Il convient à la plupart des prises sans connexion. Vous devez spécifier les indicateurs comme : NULL, MSG_DONTROUTE, MSG_OOB ou une combinaison de deux constantes. Vous devez également spécifier l'adresse et un port demandé.
La fonction Socket_sendto renvoie true lorsque les données sont envoyées, mais rien ne garantit que les données arriveront.
booléen socket_set_block (socket de ressources)
La fonction socket_set_block définit le socket en mode bloc, qui est le mode par défaut. En mode bloc, les opérations d'E/S sont effectuées sur une requête terminée.
booléen socket_set_nonblock (socket de ressources)
La fonction socket_set_nonblock définit le socket à insérer dans n'importe quel mode non-bloc. En mode non-bloc, les opérations d'E/S reviennent immédiatement, même s'il n'y a aucune donnée.
boolean socket_set_option (socket de ressource, niveau entier, option entière, valeur entière)
La fonction socket_set_option définit une option pour le socket. Le paramètre Level définit une constante qui marque le niveau. Les valeurs valides incluent : SOL_SOCKET, SOL_TCP et SOL_UDP. Les paramètres Option doivent correspondre aux constantes du tableau des options de socket ci-dessus.
booléen socket_shutdown (socket de ressources, entier comment)
La fonction socket_shutdown ferme un socket pour les E/S. Le réglage sur 0 arrêtera de recevoir des données, le réglage sur 1 arrêtera l'envoi de données et le réglage sur 2 arrêtera les deux opérations.
chaîne socket_strerror (erreur entière)
La fonction socket_strerror renvoie un numéro d'erreur et des informations détaillées sur l'erreur.
entier socket_write (socket de ressources, tampon de chaîne, longueur entière)
La fonction socket_write écrit les données dans le tampon, puis les envoie au socket. Vous pouvez spécifier le paramètre length pour spécifier le nombre maximum d'octets dans la mémoire tampon. Cette fonction est généralement plus pratique que socket_send.
booléen socket_writev (socket de ressource, iovecteur de ressource)
La fonction socket_writev écrit des données sur un socket via des vecteurs d'E/S.