CLASSICISTRANIERI HOME PAGE - YOUTUBE CHANNEL
SITEMAP
Audiobooks by Valerio Di Stefano: Single Download - Complete Download [TAR] [WIM] [ZIP] [RAR] - Alphabetical Download  [TAR] [WIM] [ZIP] [RAR] - Download Instructions

Make a donation: IBAN: IT36M0708677020000000008016 - BIC/SWIFT:  ICRAITRRU60 - VALERIO DI STEFANO or
Privacy Policy Cookie Policy Terms and Conditions
Berkeley sockets - Wikipédia

Berkeley sockets

Un article de Wikipédia, l'encyclopédie libre.

Vous avez de nouveaux messages (diff ?).
Cet article n'est pas fini. Son état est provisoire et sera modifié. Une version améliorée est en préparation.
  • Veuillez prendre son état actuel avec prudence : Le plan et le contenu peuvent être incomplets, ou en révision.
  • Pour participer à cette amélioration, il vous est recommandé de consulter la page de discussion au préalable.

Les Berkeley sockets représentent une interface de programmation pour les communications entre processusInterprocess communication — pour les machines de type UNIX. Elles ont été introduites pour la première fois dans la version 4.3BSD de l'UNIX de l'université de Berkeley. Avant leur introduction, le seul mécanisme standard qui permettait à deux processus de communiquer se faisait par l'intermédiaire des pipes.

Sommaire

[modifier] Généralités

La communication se fait à l'aide d'une socket. Une socket représente un point terminal d'un canal de communication entre deux ou plusieurs processus — un nom peut lui être attribué.

Chaque socket possède un type et un ou plusieurs processus qui lui sont associés. Elle est également caractérisée par le domaine de communication dans lequel elle se trouve. Ce dernier est une abstraction qui permet de regrouper les processus ayant des propriétés communes et communiquant par l'intermédiaire de sockets. Normalement, une socket ne peut échanger des données qu'avec une socket se trouvant dans le même domaine de communication.

La communication inter-processus de 4.3BSD supportait trois domaines de communication:

  • le domaine Unix dans lequel deux processus se trouvant sur la même station Unix uniquement peuvent communiquer, [1]
  • le domaine Internet pour les processus utilisant le protocole TCP/IP pour communiquer entre eux,
  • le domaine NS pour les processus échangeant des données en utilisant le protocole standard de Xerox.

[modifier] Types de sockets

Les différents types de sockets dépendent de quelques propriétés visibles par le programmeur. Rien n'empêche deux sockets de types différents de communiquer entre eux si le protocole utilisé le supporte — même si les processus sont supposés communiquer uniquement par des sockets de même type.

Il existe généralement quatre types de sockets. Une socket stream permet une communication bidirectionnelle, sûre, séquencée et un flux de données sans duplication pouvant entraîner une fragmentation des paquets transmis.

Une socket datagram permet une communication bidirectionnelle qui n'est pas séquencée, pas sûre, et peut éventuellement entraîner une duplication des données. Un processus utilisant ce type de socket peut donc recevoir les données dans un ordre différent de l'ordre de départ. Par contre, aucune fragmentation n'est effectuée sur les paquets transmis. Ce type de socket est par exemple utilisée dans les réseaux à commutation de paquets comme Ethernet.

Une socket raw permettent aux utilisateurs d'accéder à des protocoles de communication différents en même temps. Les sockets raw ne sont pas destinées aux utilisateurs courants — seul l'utilisateur root peut y avoir accès sur la plupart des systèmes UNIX® — elles permettent d'avoir accès à données "brutes" et sont utilisées par exemple pour analyser le traffic d'un réseau.

Une socket sequenced packet ressemble à une socket stream sauf qu'elle n'utilise pas de fragmentations de paquets.

[modifier] Création d'une socket

La création d'une socket se fait à partir de l'appel système suivant:

#include <sys/types.h>
#include <sys/socket.h>

s = socket (domain, type, protocol);
int s, domain, type, protocol;

Cet appel système permet de créer une socket appartenant à domain et possédant la propriété type. Il renvoit un nombre entier — -1 en cas d'échec — qui peut assimilé à un descripteur de fichier . Le champ protocol peut ne pas être spécifié — valeur égale à zéro. Dans ce cas, le système choisit un protocole approprié parmi les différents protocoles utilisés dans le domaine de communication considéré et supportant le type de socket requis.

Les champs domain et type sont choisis parmi les constantes définies dans le fichier <sys/socket.h>. Pour le domaine UNIX par exemple, la constante est AF_UNIX [2]AF_INET pour le domaine internet et AF_NS pour le dmaine NS. Les types de sockets sont les suivants: SOCK_STREAM, SOCK_DGRAM, SOCK_RAW, SOCK_NS. Par exemple pour créer une socket utilisant le protocole TCP, l'appel système suivant peut être effectué:

int s;
s = socket (AF_INET, SOCK_STREAM, 0);

La plupart du temps, la valeur par défaut du champ protocol est suffisant — même si on peut lui attribué une valeur particulière.

[modifier] Attribution d'un nom

Une socket est créée sans nom et ne permet pas tout de suite d'échanger des données. Pour pouvoir y remédier, il faut lui associer une adresse. Pour les domaines Internet et NS, cette association est composée d'une adresse locale et d'un port local et d'une adresse distante et d'un port distant — tandis que pour le domaine UNIX, il s'agit de répertoires local et distant [3].

L'adresse générique d'une socket est définie par la structure suivante:

#define SOCK_MAXADDRLEN 255 /* adresse la plus longue possible */
struct sockaddr {

   unsigned char sa_len; /* longueur totale */
   sa_family_t   sa_family; /* famille d'adresse */
   char          sa_data[14]; /* valeur de l'adresse */

};

Cette adresse n'est généralement pas directement ulilisé en tant que telle — servant uniquement de référence générique pour les appels systèmes. À la place, une adresse plus spécifique est utilisée pour chaque domaine de communication. Pour le domaine internet par exemple, la structure suivante — définie dans le fichier netinet/in.h — remplace la version précédente:

struct sockaddr_in {

       uint8_t   sin_len; /* longueur totale */
       sa_family sin_family; /* famille d'adresse */
       in_port_t sin_port; /* numero de port */
       struct in_addr sin_addr; /* valeur sur 32 bits de l'adresse */
       char   sin_zero[8]; /* champ rempli de zeros */

}

De la même maniere, il existe également une adresse sockaddr_un et sockaddr_ns pour les domaines unix et NS.

L'association d'une socket avec une adresse se fait par l'intermediaire de l'appel système bind:

#include <sys/types.h>
#include <sys/socket.h>

int
bind (int s, const struct sockaddr *addr, socklen_t addrlen);

ou s est la socket associée avec l'adresse pointée par addr dont la longueur totale est addrlen. La fonction renvoit -1 en cas d'échec. Après avoir effectué cette operation, la socket est desormais referencée et peut donc recevoir et envoyer des données.

[modifier] Établissement d'une connexion

[modifier] Notes

  1. Les processus communiquant via NFS ne font pas partie de ce domaine.
  2. AF pour adress family.
  3. Distant ici fait référence à un autre processus se trouvant sur la même machine.


Portail de l'informatique – Accédez aux articles de Wikipédia concernant l’informatique.
Static Wikipedia 2008 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -

Static Wikipedia 2007 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -

Static Wikipedia 2006 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -

Sub-domains

CDRoms - Magnatune - Librivox - Liber Liber - Encyclopaedia Britannica - Project Gutenberg - Wikipedia 2008 - Wikipedia 2007 - Wikipedia 2006 -

Other Domains

https://www.classicistranieri.it - https://www.ebooksgratis.com - https://www.gutenbergaustralia.com - https://www.englishwikipedia.com - https://www.wikipediazim.com - https://www.wikisourcezim.com - https://www.projectgutenberg.net - https://www.projectgutenberg.es - https://www.radioascolto.com - https://www.debitoformtivo.it - https://www.wikipediaforschools.org - https://www.projectgutenbergzim.com