socket_create_pair

(PHP 4 >= 4.0.7, PHP 5)

socket_create_pair ? Crée une paire de sockets identiques et les stocke dans un tableau

Description

bool socket_create_pair ( int domain, int type, int protocol, array &fd )

socket_create_pair() crée une paire de sockets identiques et les stocke dans &fd. Cette fonction est utilisée couramment dans IPC (InterProcess Communication).

Le paramètre domain spécifie la famille du protocole à utiliser par la socket.

Tableau 281. Famille d'adresses / protocoles valides

DomaineDescription
AF_INET Protocole IPv4. TCP et UDP sont les protocoles communs de cette famille. Supporté uniquement sous Windows.
AF_INET6 Protocole IPv6. TCP et UDP sont les protocoles communs de cette famille. Le support a été ajouté en PHP 5.0.0. Supporté uniquement sous Windows.
AF_UNIX Protocole de communication locale. Le rendement élevé et des moindres coûts supplémentaires lui font une grande force d'IPC (Interprocess Communication).

Le paramètre type spécifie le type de communication à utiliser par la socket.

Tableau 282. Types de sockets disponibles

TypeDescription
SOCK_STREAM Fournit des flux d'octets ordonnancés, fiables, full-duplex, raccordés sur la base. Un mécanisme de transmission des données "out-of-band" peut être supporté. Le protocole TCP est basé sur ce type de sockets.
SOCK_DGRAM Support des datagrammes (moins de connexion, message non garanti d'une longueur maximum fixe). Le protocole UDP est basé sur ce type de sockets.
SOCK_SEQPACKET Fournit un chemin de transmission de données séquentiel, fiable, connecté à la base par deux chemins pour les datagrammes de longueur maximale fixe ; un consommateur est requis pour lire la totalité d'un paquet avec chaque appel à la lecture.
SOCK_RAW Fournit l'accès brut de protocole de réseau. Ce type spécial de sockets peut être utilisé pour construire manuellement tout type de protocole. Une utilisation commune de ce type de sockets est le traitement des requêtes ICMP (comme le ping, traceroute, etc.).
SOCK_RDM Fournit une couche fiable de datagramme qui ne garantie pas l'ordre des données. Ce type de sockets est le plus susceptible de ne pas être implémenté sur votre système d'exploitation.

Le paramètre protocol définit un protocole spécifique dans le domaine spécifié domain pour être utilisé lors d'une communication sur une socket retournée. La valeur appropriée peut être retrouvée par son nom en utilisant la fonction getprotobyname(). Si le protocole désiré est TCP ou UDP, les constantes correspondantes SOL_TCP et SOL_UDP peuvent être utilisées.

Tableau 283. Protocoles communs

NomDescription
icmp Le protocole ICMP (Internet Control Message Protocol) est utilisé tout d'abord par les passerelles et les hôtes pour reporter les erreurs dans des communications de datagramme. La commande "ping" (présente dans les systèmes de production modernes) est un exemple d'application utilisant le protocole ICMP.
udp Le protocole UDP (User Datagramm Protocol) est un protocole sans connexion, incertaine avec les longueurs d'enregistrement fixes. De ce fait, UDP requiert une quantité minimum de protocole.
tcp Le protocole TCP (Transmission Control Protocol) est un protocole fiable, connecté sur la base, orienté flux et full-duplex. TCP garantit que chaque paquet est reçu dans l'ordre dans lequel il a été envoyé. Si quelques paquets sont perdus pendant la communication, TCP retransmettra ces paquets tant que l'hôte destinataire ne les aura pas reçu entièrement. Pour des raisons de fiabilité et de performance, l'implémentation TCP, elle-même, décide des frontières appropriées d'octets de la couche fondamentale de communication du datagramme. Par conséquent, les applications TCP doivent autoriser la possibilité de transmission partielle d'enregistrements.

Exemple 2360. Exemple avec socket_create_pair()

<?php
$sockets
= array();
/* Création de la paire de sockets */
if (socket_create_pair(AF_UNIX, SOCK_STREAM, 0, $sockets) === false) {
   echo
"socket_create_pair a échoué. Raison : ".socket_strerror(socket_last_error());
}
/* Envoi et réception de données */
if (socket_write($sockets[0], "ABCdef123\n", strlen("ABCdef123\n")) === false) {
   echo
"socket_write() a échoué. Raison : ".socket_strerror(socket_last_error($sockets[0]));
}
if ((
$data = socket_read($sockets[1], strlen("ABCdef123\n"), PHP_BINARY_READ) === false) {
   echo
"socket_read() a échoué. Raison : ".socket_strerror(socket_last_error($sockets[1]));
}
var_dump($data);

/* Fermeture des sockets */
socket_close($sockets[0]);
socket_close($sockets[1]);
?>

Exemple 2361. Exemple IPC avec socket_create_pair()

<?php
$ary
= array();
$strone = 'Message From Parent.';
$strtwo = 'Message From Child.';
if (
socket_create_pair(AF_UNIX, SOCK_STREAM, 0, $ary) === false) {
   echo
"socket_create_pair() a échoué. Raison : ".socket_strerror(socket_last_error());
}
$pid = pcntl_fork();
if (
$pid == -1) {
   echo
'Impossible de dupliquer le processus.';
} elseif (
$pid) {
  
/* parent */
  
socket_close($ary[0]);
   if (
socket_write($ary[1], $strone, strlen($strone)) === false) {
       echo
"socket_write() a échoué. Raison : ".socket_strerror(socket_last_error($ary[1]));
   }
   if (
socket_read($ary[1], strlen($strtwo), PHP_BINARY_READ) == $strtwo) {
       echo
"Réception de $strtwo\n";
   }
  
socket_close($ary[1]);
} else {
  
/* fils */
  
socket_close($ary[1]);
   if (
socket_write($ary[0], $strtwo, strlen($strtwo)) === false) {
       echo
"socket_write() a échoué. Raison : ".socket_strerror(socket_last_error($ary[0]));
   }
   if (
socket_read($ary[0], strlen($strone), PHP_BINARY_READ) == $strone) {
       echo
"Réception de $strone\n";
   }
  
socket_close($ary[0]);
}
?>



Rechercher une fonction PHP

Réseaux sociaux

Vous pouvez modifier vos préférences dans votre profil pour ne plus afficher les interactions avec les réseaux sociaux sur ces pages.

 

Nuage de mots clés

5 mots clés dont 0 définis manuellement (plus d'information...).

Avertissement

Cette page ne possède pas encore de mots clés manuels, ceci est donc un exemple automatique (les niveaux de pertinence sont fictifs, mais les liens sont valables). Pour tester le nuage avec une page qui contient des mots définis manuellement, vous pouvez cliquer ici.

Vous pouvez modifier vos préférences dans votre profil pour ne plus afficher le nuage de mots clés.

 

Références

  1. Consulter le document html Langue du document: fr Manuel PHP : http://be2.php.net, socket_create_pair

Ces références et liens indiquent des documents consultés lors de la rédaction de cette page, ou qui peuvent apporter un complément d'information, mais les auteurs de ces sources ne peuvent être tenus responsables du contenu de cette page.
L'auteur de ce site est seul responsable de la manière dont sont présentés ici les différents concepts, et des libertés qui sont prises avec les ouvrages de référence. N'oubliez pas que vous devez croiser les informations de sources multiples afin de diminuer les risques d'erreurs.

 

Astuce pour imprimer les couleurs des cellules de tableaux : http://www.gaudry.be/ast-rf-450.html
Aucun commentaire pour cette page

© Ce document issu de l′infobrol est enregistré sous le certificat Cyber PrInterDeposit Digital Numbertection. Enregistrement IDDN n° 5329-10544
Document créé le 08/02/07 22:30, dernière modification le Vendredi 17 Juin 2011, 12:12
Source du document imprimé : http://www.gaudry.be/php-rf-function.socket-create-pair.html Document affiché 1 fois ce mois de Juin.
St.Gaudry©07.01.02
Outils (masquer)
||
Recherche (afficher)
Recherche :

Utilisateur (masquer)
Navigation (masquer)
Apparence (afficher)
Stats (afficher)
15832 documents
452 astuces.
549 niouzes.
3099 definitions.
447 membres.
8115 messages.

Document genere en :
0,32 seconde

Mises à jour :
Mises à jour du site
Citation (masquer)
Ordinateur : moyen conçu pour accélérer et automatiser les erreurs.

Anonyme
 
l'infobrol
Nous sommes le Dimanche 03 Juin 2012, 07:03, toutes les heures sont au format GMT+1.00 Heure, heure d'été (+1)