Connexions serveur
Dans le domaine Internet, le processus serveur crée un socket, le lie à un port de protocole identifié et attend les demandes. Si le processus serveur utilise une distribution de flux fiable ou si la réponse de calcul prend un temps important, il se peut qu'une nouvelle demande arrive avant que le serveur n'ait fini de répondre à une ancienne demande.
La sous-routine listen permet aux processus serveur de préparer un socket pour les connexions entrantes. En termes de protocoles sous-jacents, la sous-routine listen place le socket en mode passif prêt à accepter les connexions. Lorsque le processus serveur démarre la sous-routine listen , il informe également le système d'exploitation que le logiciel de protocole doit mettre en file d'attente plusieurs demandes simultanées qui arrivent sur un socket. La sous-routine listen inclut un paramètre qui permet à un processus de spécifier la longueur de la file d'attente des demandes pour ce socket. Si la file d'attente est saturée lorsqu'une demande de connexion arrive, le système d'exploitation refuse la connexion en supprimant la demande. La sous-routine listen s'applique uniquement aux sockets qui ont sélectionné une distribution de flux fiable ou un service de datagramme orienté connexion.
Un processus serveur utilise les sous-routines socket, bindet listen pour créer un socket, le lier à une adresse de protocole connue et spécifier une longueur de file d'attente pour les demandes de connexion. L'appel de la sous-routine bind associe le socket à un port de protocole identifié, mais le socket n'est pas connecté à une destination externe spécifique. Le processus serveur peut spécifier un caractère générique permettant au socket de recevoir une demande de connexion d'un client arbitraire.
Tout cela s'applique au service de datagramme orienté connexion dans le domaine NDD, sauf que le processus serveur lie le socket créé localement au nom NDD du système d'exploitation et spécifie les paramètres ATM B-LLI et B-HLI avant d'appeler la sous-routine listen . Si seul B-LLI est spécifié, tous les appels entrants (ou les connexions), quelle que soit la valeur B-HLI , seront transmis à cette application.
Une fois qu'un socket a été configuré, le processus serveur doit attendre une connexion. Le processus serveur attend une connexion à l'aide de la sous-routine accept . Un appel à la sous-routine accept se bloque jusqu'à ce qu'une demande de connexion arrive. Lorsqu'une demande arrive, le système d'exploitation renvoie l'adresse du processus client qui a émis la demande. Le système d'exploitation crée également un nouveau socket dont la destination est connectée au processus client demandeur et renvoie le nouveau descripteur de socket au processus serveur appelant. Le socket d'origine a toujours une destination externe générique qui reste ouverte.
Lorsqu'une connexion arrive, l'appel à la sous-routine accept est renvoyé. Le processus serveur peut traiter les demandes de manière interactive ou simultanée. Dans l'approche interactive, le serveur gère la demande lui-même, ferme le nouveau socket, puis démarre la sous-routine accept pour obtenir la demande de connexion suivante. Dans l'approche simultanée, après le retour de l'appel à la sous-routine accept , le processus serveur enclenche un nouveau processus pour traiter la demande. Le nouveau processus hérite d'une copie du nouveau socket, procède au traitement de la demande, puis se ferme. Le processus serveur d'origine doit fermer sa copie du nouveau socket, puis appeler la sous-routine accept pour obtenir la demande de connexion suivante.
Si un appel select est émis sur un descripteur de fichier d'un socket en attente d'exécution d'une sous-routine accept sur la connexion, lorsque le message "ready" est renvoyé, cela ne signifie pas que les données sont là, mais que la demande a abouti. Il est désormais possible de démarrer la sous-routine select sur le descripteur de socket renvoyé pour voir si des données sont disponibles pour une conversation sur le socket de message.
La conception simultanée des processus serveur entraîne l'utilisation de plusieurs processus utilisant le même numéro de port de protocole local. Dans la communication de style TCP, une paire de points de terminaison définit une connexion. Ainsi, peu importe le nombre de processus qui utilisent un numéro de port de protocole local donné tant qu'ils se connectent à des destinations différentes. Dans le cas d'un serveur simultané, il existe un processus par client et un processus supplémentaire qui accepte les connexions. Le processus serveur principal comporte un caractère générique pour la destination, ce qui lui permet de se connecter à un site étranger arbitraire. Chaque processus restant a une destination externe spécifique. Lorsqu'un segment de données TCP arrive, il est envoyé au socket connecté à la source du segment. S'il n'existe pas de socket de ce type, le segment est envoyé au socket qui possède un caractère générique pour sa destination externe. De plus, comme le socket avec une destination externe générique n'a pas de connexion ouverte, il n'honore que les segments TCP qui demandent une nouvelle connexion.