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);

    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-IEȘIRE

EBADF
    sockfd nu este un descriptor de fișier valid.

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

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
fcntl(2), recv(2), send(2), tcp(7)

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 (https://www.gnu.org/licenses/gpl-3.0.html) 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.