sockatmark(3) Library Functions Manual sockatmark(3)

sockatmark - determină dacă soclul se află la marcajul de ieșire din bandă

Biblioteca C standard (libc, -lc)

#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

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ă.

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

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

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

POSIX.1-2008.

glibc 2.2.4. POSIX.1-2001.

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.

Înainte de glibc 2.4, sockatmark() nu funcționa.

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");
            ...
        }
    }

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

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.

31 octombrie 2023 Pagini de manual de Linux 6.06