Scroll to navigation

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)

REZUMAT

#include <sys/socket.h>
int sockatmark(int sockfd);

Cerințe pentru macrocomenzi de testare a caracteristicilor pentru glibc (consultați feature_test_macros(7)):

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

sockfd nu este un descriptor de fișier valid.
sockfd nu este un descriptor de fișier la care se poate aplica sockatmark().

VERSIUNI

sockatmark() a fost adăugată în glibc 2.2.4.

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-2001, POSIX.1-2008.

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

fcntl(2), recv(2), send(2), tcp(7)

TRADUCERE

Traducerea în limba română a acestui manual a fost creată 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.

15 decembrie 2022 Pagini de manual de Linux 6.03