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
Sécuriser Microsoft 365 avec une approche Zero-Trust
Découvrez comment renforcer la cyber-résilience de Microsoft 365 grâce à une approche Zero-Trust, une administration granulaire et une automatisation avancée. La technologie Virtual Tenant de CoreView permet de sécuriser et simplifier la gestion des environnements complexes, tout en complétant vos stratégies IAM, y compris dans les secteurs réglementés.
Les articles les plus consultés
- Cybersécurité Active Directory et les attaques de nouvelle génération
- Afficher les icônes cachées dans la barre de notification
- Partager vos images, vidéos, musique et imprimante avec le Groupe résidentiel
- Et si les clients n’avaient plus le choix ?
- N° 2 : Il faut supporter des langues multiples dans SharePoint Portal Server
Les plus consultés sur iTPro.fr
- Secteur public : l’IA accélère la modernisation des infrastructures
- De l’inventaire à l’action : l’Asset Management au service d’un Numérique plus responsable
- IA et bureaucratie : la complexité qui grève les projets
- IA dans les services financiers : priorité stratégique, mais passage à l’échelle sous tension
Articles les + lus
Model Context Protocol : le contexte, grand oublié du débat
Microsoft dévoile MAI-Thinking-1 : un modèle de raisonnement « enterprise-grade » en preview publique
Couchbase lance AI Data Plane pour industrialiser l’IA agentique
Windows 11 : Microsoft généralise le point-in-time restore pour accélérer la remise en service des PC
Computex 2026 : 5 signaux forts à retenir
À la une de la chaîne Tech
- Model Context Protocol : le contexte, grand oublié du débat
- Microsoft dévoile MAI-Thinking-1 : un modèle de raisonnement « enterprise-grade » en preview publique
- Couchbase lance AI Data Plane pour industrialiser l’IA agentique
- Windows 11 : Microsoft généralise le point-in-time restore pour accélérer la remise en service des PC
- Computex 2026 : 5 signaux forts à retenir
