> Tech > Mettre les sockets en mode de non-blocage

Mettre les sockets en mode de non-blocage

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

Ce tip suppose que l'on ait déjà  utilisé des sockets. Pour une introduction pratique à  l'utilisation des sockets, voir “ SCKTPROC Eases RPG Sockets Programming ”, NEWS/400, juin 1999. Ce tip s'appuie sur cet article. Quand on utilise des sockets, le mode par défaut d'une fonction de réception est appelé

“ blocage ”. A savoir que si la fonction recv() n’a rien à  recevoir, elle s’immobilise et attend de recevoir quelque chose (autrement dit, elle “ bloque ” le flux de traitement).






Changer en mode non blocage :


D F_SETFL         c                   7
D O_NONBLOCK c 128
D EWOULDBLOCK c 3406

D fcntl pr 10i 0 ExtProc(‘fcnt »)
D 10i 0 value
D 10i 0 value
D 10i 0 value options(*noPass)

D retCd s 10i 0
D SocketD 10i 0 value

* Change the socket to have nonblocking I/O
C eval retCd = fcntl(socketD :
C F_SETFL :
C O_NONBLOCK)



Comme le blocage est parfois indésirable, il est utile qu’il cesse (par timeout) après quelques secondes. C’est possible en changeant le mode en “ nonblocking ”, signifiant ainsi que si recv() n’a rien à  recevoir, il renverra immédiatement un code retour de EWOULD BLOCK (indiquant qu’il bloquerait si l’on était en mode blocage). On peut ensuite coder sa propre boucle de temporisation (timeout) autour de la fonction recv().
Comme le montre l’encadré ci-dessus, pour passer en mode nonblocking, il faut appeler la fonction fcntl(). Ce qui a pour effet de changer le socket en nonblocking. Ce changement est indispensable avant d’exécuter la fonction recv() ou recvfrom().

Chris Woodhead, analyste/programmeur
Baycorp Holdings
Auckland, Nouvelle Zélande

Téléchargez gratuitement cette ressource

Cybersécurité sous contrôle à 360°

Cybersécurité sous contrôle à 360°

Avec Cloud in One, les entreprises ne gagnent pas uniquement en agilité, en modernisation et en flexibilité. Elles gagnent également en sécurité et en résilience pour lutter efficacement contre l’accroissement en nombre et en intensité des cyberattaques. Découvrez l'axe Cybersécurité de la solution Cloud In One.

Tech - Par iTPro - Publié le 24 juin 2010