Que sont les sockets non bloquants ?
Que sont les sockets non bloquants ?

Vidéo: Que sont les sockets non bloquants ?

Vidéo: Que sont les sockets non bloquants ?
Vidéo: Cours programmation socket (réseau) n°7 - E/S non-bloquantes en Java 2024, Novembre
Anonim

non - blocage des prises . La solution à ce problème s'appelle " non - blocage des prises ". Par défaut, TCP prises sont dans " blocage ". Par exemple, lorsque vous appelez recv() pour lire à partir d'un flux, le contrôle n'est pas renvoyé à votre programme tant qu'au moins un octet de données n'est pas lu à partir du site distant.

Par conséquent, qu'est-ce qu'un socket bloquant et non bloquant ?

Dans blocage mode, le recv, envoyer, connecter (TCP uniquement) et accepter (TCP uniquement) prise Les appels d'API seront bloquer indéfiniment jusqu'à ce que l'action demandée ait été exécutée. Dans non - blocage mode, ces fonctions reviennent immédiatement. sélectionner va bloquer jusqu'à ce que le prise est prêt.

On peut aussi se demander si les sockets bloquent par défaut ? Par défaut , TCP prises sont placés dans un blocage mode. Cela signifie que le contrôle n'est pas renvoyé à votre programme tant qu'une opération spécifique n'est pas terminée.

A ce propos, comment faire une socket non bloquante ?

Pour marquer un prise comme non - blocage , nous utilisons l'appel système fcntl. Voici un exemple: int flags = guard(fcntl(socket_fd, F_GETFL), "impossible d'obtenir les indicateurs de fichier"); guard(fcntl(socket_fd, F_SETFL, flags | O_NONBLOCK), "ne pouvait pas ensemble drapeaux de fichier");

Qu'est-ce que le blocage des sockets ?

UNE prise peut être dans " mode blocage " ou " non bloquant mode ." Les fonctions de prises dans blocage (ou synchrone) mode ne reviennent pas tant qu'ils n'ont pas terminé leur action. C'est appelé blocage parce que le prise dont la fonction a été appelée ne peut rien faire - est bloqué - jusqu'à ce que l'appel revienne.

Conseillé: