table of contents
sockatmark(3) | Library Functions Manual | sockatmark(3) |
NUME¶
sockatmark - determină dacă soclul se află la marcajul de ieșire din bandă
BIBLIOTECA¶
Biblioteca C standard (libc, -lc)
SINOPSIS¶
#include <sys/socket.h>
int sockatmark(int sockfd);
sockatmark():
_POSIX_C_SOURCE >= 200112L
DESCRIERE¶
sockatmark() returnează o valoare care indică dacă soclul la care face referire descriptorul de fișier sockfd se află sau nu la marcajul de ieșire din bandă. Dacă soclul se află la marcaj, atunci se returnează 1; dacă soclul nu se află la marcaj, se returnează 0. Această funcție nu elimină marcajul de ieșire din bandă.
VALOAREA RETURNATö
Un apel reușit la sockatmark() returnează 1 dacă soclul se află la marcajul de ieșire din bandă sau 0 dacă nu este. În caz de eroare, se returnează -1, iar errno este configurată pentru a indica eroarea.
ERORI-IEȘIRE¶
ATRIBUTE¶
Pentru o explicație a termenilor folosiți în această secțiune, a se vedea attributes(7).
Interfață | Atribut | Valoare |
sockatmark() | Siguranța firelor | MT-Safe |
STANDARDE¶
POSIX.1-2008.
ISTORIC¶
glibc 2.2.4. POSIX.1-2001.
NOTE¶
Dacă sockatmark() returnează 1, atunci datele din afara benzii pot fi citite folosind indicatorul MSG_OOB din recv(2).
Datele din afara benzii sunt acceptate numai în cazul anumitor protocoale de soclu de flux.
sockatmark() poate fi apelat în condiții de siguranță de la un gestionar pentru semnalul SIGURG.
sockatmark() este implementată utilizând operația ioctl(2) SIOCATMARK.
ERORI¶
Înainte de glibc 2.4, sockatmark() nu funcționa.
EXEMPLE¶
Următorul cod poate fi utilizat după primirea unui semnal SIGURG pentru a citi (și a elimina) toate datele până la marcaj și apoi pentru a citi octetul de date de la marcaj:
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");
...
}
}
CONSULTAȚI ȘI¶
TRADUCERE¶
Traducerea în limba română a acestui manual a fost făcută de Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>
Această traducere este documentație gratuită; citiți Licența publică generală GNU Versiunea 3 sau o versiune ulterioară cu privire la condiții privind drepturile de autor. NU se asumă NICIO RESPONSABILITATE.
Dacă găsiți erori în traducerea acestui manual, vă rugăm să trimiteți un e-mail la translation-team-ro@lists.sourceforge.net.
2 mai 2024 | Pagini de manual Linux (nepublicate) |