Sous-routine socket

Objectif

Crée un point d'extrémité pour la communication et renvoie un descripteur.

Bibliothèque

Bibliothèque C standard (libc.a)

Syntaxe

#include <sys/types.h>
#include <sys/socket.h>
#include <sys/socketvar.h>
int socket ( AddressFamily,  Type,  Protocol)
int AddressFamily, Type, Protocol;

Descriptif

La sous-routine socket crée un socket dans la AddressFamily spécifiée et du type spécifié. Un protocole peut être spécifié ou affecté par le système. Si le protocole n'est pas spécifié (valeur 0), le système sélectionne un protocole approprié à partir des protocoles de la famille d'adresses qui peuvent être utilisés pour prendre en charge le type de socket demandé.

La sous-routine Socket renvoie un descripteur (entier) qui peut être utilisé dans les sous-routines ultérieures qui fonctionnent sur des sockets.

Opérations de socket de contrôle des options de niveau de socket. Les sous-routines getsockopt et setsockopt sont utilisées pour obtenir et définir ces options, qui sont définies dans le fichier /usr/include/sys/socket.h .

Paramètres

Article Descriptif
AddressFamily Indique une famille d'adresses avec laquelle les adresses spécifiées dans les opérations de socket ultérieures doivent être interprétées. Le fichier /usr/include/sys/socket.h contient les définitions des familles d'adresses. Les familles les plus couramment utilisées sont:
AF_UNIX
Indique les noms de chemin du système d'exploitation.
AF_INET
Indique les adresses Internet de l'ARPA.
AF_INET6
Indique les adresses IPv6 et IPv4 .
AF_NS
Indique le protocole XEROX Network Systems.
AF_CONTOURNEMENT
Indique le domaine de protocole de contournement du noyau (par exemple, les protocoles qui fonctionnent sur le domaine InfiniBand ).
type Indique la sémantique de la communication. Le fichier /usr/include/sys/socket.h définit les types de socket. Le système d'exploitation prend en charge les types suivants:
FLUX SOCK_STREAM
Fournit des flux d'octets séquencés et bidirectionnels avec un mécanisme de transmission pour les données hors bande.
PROGRAMME_SOCK_
Fournit des datagrammes, qui sont des messages sans connexion d'une longueur maximale fixe (en général court).
SOCK_RAW
Permet d'accéder aux interfaces et protocoles réseau internes. Ce type de socket n'est disponible qu'à l'utilisateur root ou aux utilisateurs non root qui disposent de la fonction CAP_NUMA_ATTACH. (Pour l'accès au socket brut non root, la fonction CAP_NUMA_ATTACH, avec CAP_PROPAGATE, est affectée à l'aide de Commande chuser).
SOCK_SEQPAQUET
Fournit des flux d'informations séquencés, fiables et non dupliqués. Ce type de socket est utilisé pour la création de socket de type UDP dans le cas du protocole Stream Control Transmission Protocol et du protocole Reliable Datagram Sockets (RDS).
Protocole Indique un protocole particulier à utiliser avec le socket. La spécification du paramètre Protocole de 0 entraîne la valeur par défaut du sous-programme Socket dans le protocole standard du type de socket renvoyé. Pour les sockets SCTP, le paramètre de protocole est IPPROTO_SCTP. Pour les sockets RDS , le paramètre Protocole est BYPASSPROTO_RDS.

Valeurs renvoyées

Une fois l'opération terminée, la sous-routine Socket renvoie un entier (descripteur de socket).

Si la sous-routine Socket échoue, le gestionnaire de sous-programme exécute les fonctions suivantes:

  • Renvoie une valeur de -1 au programme appelant.
  • Déplace un code d'erreur indiquant l'erreur spécifique dans la variable globale Errno . Pour plus d'informations sur la variable Errno , voir Classe d'objets de notification d'erreur.

Codes d'erreur

Le sous-programme Socket échoue si l'une des erreurs suivantes se produit:

Erreur Descriptif
EAFNOSUPPORT Les adresses de la famille d'adresses spécifiée ne peuvent pas être utilisées avec ce socket.
FICHIER La table des descripteurs de processus est pleine.
ENOBUFS Des ressources insuffisantes étaient disponibles dans le système pour compléter l'appel.
ESOCKTNOSUPPORT Le socket de la famille d'adresses spécifiée n'est pas pris en charge.

Exemples

Le fragment de programme suivant illustre l'utilisation de la sous-routine Socket pour créer une socket de datagramme pour une utilisation sur machine:

s = socket(AF_UNIX, SOCK_DGRAM,0);

Caractéristiques de mise en oeuvre

Le sous-programme de socket fait partie de l'environnement d'exécution du système d'exploitation de base (BOS).

Les applications de socket peuvent être compilées avec COMPAT_43 défini. Cela rendra la structure sockaddr BSD 4.3 compatible. Pour plus de détails, voir socket.h.