> Tech > La temporisation appliquée aux sockets

La temporisation appliquée aux sockets

Tech - Par iTPro.fr - Publié le 24 juin 2010
email

par Chris Woodhead et Morgan Wadsworth - Mis en ligne le 29/06/2005 - Publié en Octobre 2004

Pour que vos fonctions socket ne soient plus bloquées

Les sockets permettent à  un programme de communiquer avec un autre - sur la même machine ou une différente - en utilisant TCP/IP, même si les détails de ce protocole vous sont cachés quand vous utilisez des sockets. En substance, les sockets permettent à  un programme applicatif d'établir une connexion puis d'échanger des données. C'est une méthode standard de communication entre plates-formes ...Généralement, les sockets permettent à  un client et à  un serveur de se parler. Pour programmer l'utilisation de sockets, on crée un serveur chargé d'écouter et de traiter les requêtes provenant d'un ou plusieurs clients. Il n'y a pas de restriction à  la fonction du client et du serveur : c'est à  l'initiative du concepteur de l'application. Citons quelques exemples simples : un client qui envoie des transactions comptables à  un serveur, lequel les enregistre en comptabilité, ou un client qui envoie une requête à  un serveur qui effectue la consultation ou la recherche puis renvoie le résultat. Les messages échangés entre le client et le serveur sont eux aussi sans restriction aucune. Ce peut être du texte, un format propriétaire, XML, ou autre chose.
Il existe trois types de sockets : raw (brut), datagram et stream (flux). On utilise des sockets stream quand il faut établir une connexion préalable entre des systèmes en situation d'échange, afin que les données (un flux d'octets) puissent être reçues sans perte, erreur ou duplication, dans l'ordre où elles ont été envoyées. Une connexion de sockets stream offre des flux d'entrée et de sortie, qui permettent de lire et d'écrire facilement des données entre des systèmes, tout comme on les lirait et les écrirait au moyen de fichiers stream IFS.
L'article « SCKTPROC Eases RPG Socket Programming » (www.itpro.fr Club abonnés) contient un programme de service ILE RPG très utile permettant d'appeler directement des fonctions socket stream et d'effectuer des tâches liées aux sockets. Nous allons voir comment ajouter la temporisation à  cet utilitaire. L'explication de cette amélioration suppose que vous avez déjà  utilisé des sockets. Pour vous documenter sur ce sujet, voir l'encadré Autres Ressources.

La temporisation appliquée aux sockets

Le mode par défaut de la fonction réception des sockets est
appelé « blocage » : quand il n’y a rien à  recevoir, le programme
attend indéfiniment l’arrivée de données (c’est-à dire
que le flux du traitement est « bloqué »). Si ce blocage est
indésirable, il est intéressant d’appliquer un timeout après
un certain nombre de secondes. Pour cela, on change le
mode en « non bloquant » et on utilise la fonction select(). La
documentation API d’IBM concernant la fonction select()
(voir API Finder dans Autres ressources) donne l’explication
suivante : « En utilisant select(), une application ayant de
multiples sources d’I/O interactives évite le blocage sur un
flux d’I/O pendant que l’autre flux est prêt. » Cette affirmation
est exacte mais elle implique que l’on n’utiliserait select()
que pour des sockets multiples, ce qui est trompeur :
Vous pouvez parfaitement utiliser select() pour appliquer un
timeout sur un seul socket ! Cette astuce est le « truc » qui
rend notre timeout possible.

En mode « non bloquant », s’il n’y a rien à  recevoir, le programme reviendra immédiatement avec un code de renvoi EWOULDBLOCK
(qui indique qu’il bloquerait si l’on était en mode blocage). Dès lors
qu’on est en mode non-blocage, on insère la fonction select() avant la fonction
de réception pour savoir si un socket a des données à  recevoir ou s’il a
subi un timeout.

Téléchargez cette ressource

Cybersécurité des collectivités : Enjeux, Perspectives & Solutions

Cybersécurité des collectivités : Enjeux, Perspectives & Solutions

Villes, intercommunalités, métropoles, départements et régions sont particulièrement exposés aux risques de cybersécurité. Ce livre blanc Stormshield présente les défis cyber que rencontrent les collectivités, les solutions et perspectives pour qu’elles puissent assurer leur mission d’utilité publique, en toute sécurité.

Tech - Par iTPro.fr - Publié le 24 juin 2010