sockatmark - Déterminer si la socket a atteint la marque de
données hors-bande
Bibliothèque C standard (
libc,
-lc)
#include <sys/socket.h>
int sockatmark(int sockfd);
sockatmark():
_POSIX_C_SOURCE >= 200112L
sockatmark() renvoie une valeur indiquant si oui ou non la socket
référencée par le descripteur de fichier
sockfd a
atteint une marque de données hors-bande. Si la socket a atteint la
marque, la fonction renvoie 1, sinon elle renvoie 0. Cette fonction ne
supprime pas la marque de données hors-bande.
Un appel réussit à
sockatmark() renvoie 1 si la socket a
atteint la marque de données hors-bande, ou 0 dans le cas contraire. En
cas d'erreur, elle renvoie -1 et écrit
errno en
conséquence.
- EBADF
-
sockfd n'est pas un descripteur de fichier
valable.
- EINVAL
-
sockfd n'est pas un descripteur de fichier sur
lequel sockatmark() peut s'appliquer.
sockatmark() was added in glibc 2.2.4.
Pour une explication des termes utilisés dans cette section, consulter
attributes(7).
Interface |
Attribut |
Valeur |
sockatmark() |
Sécurité des threads |
MT-Safe |
POSIX.1-2001, POSIX.1-2008.
Si
sockatmark() renvoie 1, les données hors-bande peuvent
être lues en utilisant l'attribut
MSG_OOB de
recv(2).
Les données hors-bande ne sont supportées que par certains
protocoles de socket de flux.
sockatmark() peut être appelée de manière
sûre par un gestionnaire pour le signal
SIGURG.
sockatmark() est implémentée en utilisant
l'opération
ioctl(2) SIOCATMARK.
Avant la glibc 2.4,
sockatmark() ne fonctionnait pas.
Le code suivant peut être utilisé après la réception
d'un signal
SIGURG pour lire (et abandonner) toutes les données
jusqu'à la marque de données hors-bande, puis lit l'octet de
donnée à la marque :
char buf[BUF_LEN];
char oobdata;
int atmark, s;
for (;;) {
atmark = sockatmark(sockfd);
if (atmark == -1) {
perror("sockatmark");
break;
}
if (atmark)
break;
s = read(sockfd, buf, BUF_LEN);
if (s == -1)
perror("read");
if (s <= 0)
break;
}
if (atmark == 1) {
if (recv(sockfd, &oobdata, 1, MSG_OOB) == -1) {
perror("recv");
...
}
}
fcntl(2),
recv(2),
send(2),
tcp(7)
La traduction française de cette page de manuel a été
créée par Christophe Blaess
<
https://www.blaess.fr/christophe/>, Stéphan Rafin
<
[email protected]>, Thierry Vignaud
<
[email protected]>, François Micaux, Alain Portal
<
[email protected]>, Jean-Philippe Guérard
<
[email protected]>, Jean-Luc Coulon (f5ibh)
<
[email protected]>, Julien Cristau
<
[email protected]>, Thomas Huriaux <
[email protected]>,
Nicolas François <
[email protected]>, Florentin
Duneau <
[email protected]>, Simon Paillard
<
[email protected]>, Denis Barbier
<
[email protected]>, David Prévot <
[email protected]>,
Cédric Boutillier <
[email protected]> et
Frédéric Hantrais <
[email protected]>
Cette traduction est une documentation libre ; veuillez vous reporter
à la
GNU
General Public License version 3 concernant les conditions de copie
et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.
Si vous découvrez un bogue dans la traduction de cette page de manuel,
veuillez envoyer un message à
[email protected]