> Tech > Améliorer le programme de service SCKTPROC

Améliorer le programme de service SCKTPROC

Tech - Par Renaud ROSSET - Publié le 24 juin 2010
email

La figure 1 montre les variables globales supplémentaires qu'il faut définir dans le programme de service SCKTPROC pour le changement en mode non-blocage et pour la fonction select(). La figure 2 montre deux nouvelles procédures que l'on ajoute à  la fin du programme de service SCKTPROC pour changer le mode

Améliorer le programme de service SCKTPROC

non-blocage et procéder aux timeouts. Et la figure 3
montre un ensemble de procédures de description de fichiers provenant de
l’excellent « RPG IV Sockets Tutorial » online de Scott Klement (voir Autres
ressources pour l’URL). Les procédures de description de fichiers sont utilisées
avec select_tcp() pour valider les timeouts.
Un client et un serveur peuvent bien sûr se parler de différentes manières.
Mais, dans un but pédagogique, prenons le cas courant d’un client socket qui utilise les procédures suivantes à  partir du programme
de service SCKTPROC avec l’ajout de select_tcp :

  • Opn_tcp donne simplement un descripteur de socket qui
    servira à  identifier cette connexion.

  • Con_tcp établit une connexion avec l’URL et le port que
    vous fournissez.

  • Select_tcp vous informe que la connexion socket est entièrement
    établie.

  • Snd_tcp envoie des données via le socket que vous avez
    mis en place.

  • Select_tcp vous indique s’il y a des données à  recevoir ou
    à  mettre en timeout.

  • Rcv_tcp reçoit des données provenant du socket.
  • Cls_tcp ferme le socket.

Les figures 4A à  4G présentent un exemple simple de
programme socket client qui utilise le programme de service
SCKTPROC pour appliquer un timeout. Les variables
read_set, write_set et except_set viennent du « RPG IV
Sockets Tutorial » de Scott Klement, tout comme les procédures
fd_set() et fd_zero(). Les variables read_set, write_set
et except_set de la figure 4A servent à  stocker des ensembles
de descripteurs de sockets. Read_set() contient la liste des
descripteurs de sockets à  partir de laquelle vous voulez lire.
Write_set() contient l’ensemble de descripteurs de sockets
dans lequel vous voulez écrire (ou vers lesquels vous voulez
envoyer). (Except_set() n’est pas utilisé pour les timeouts.)
Pour ajouter un descripteur de socket à  l’un de ces ensembles,
vous devez d’abord l’initialiser avec fd_zero() puis
ajouter le descripteur de socket avec fd_set(). A noter que
vous devriez utiliser fd_zero() et fd_set() uniquement sur
l’ensemble que vous voulez utiliser. Si vous n’utilisez pas un
socket particulier, transmettez-le comme *null à  select_tp()
(voir l’exemple de code dans la figure 4G).

On peut parfaitement n’avoir qu’un socket dans le
read_set(). S’il n’y a qu’un descripteur de socket dans le
read_set(),la procédure select_tcp reviendra quand il y aura
quelque chose à  recevoir (auquel cas vous ferez un rcv_tcp()
pour l’obtenir), ou elle se mettra en timeout. Vous donnerez
à  la variable wait_time de la figure 4A le nombre de secondes
souhaité pour un timeout, puis vous appellerez la procédure
select_tcp.
Nous espérons que vous apprécierez le côté pratique de
ce timeout et aussi que vous l’améliorerez à  certains égards.
C’est un peu impressionnant à  première vue, mais seul le
premier pas est difficile !

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 Renaud ROSSET - Publié le 24 juin 2010