.\" -*- coding: UTF-8 -*- '\" t .\" Copyright (c) 2006, Michael Kerrisk .\" .\" SPDX-License-Identifier: Linux-man-pages-copyleft .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH sockatmark 3 "20 июля 2023 г." "Linux man\-pages 6.05.01" .SH ИМЯ sockatmark \- определяет, есть ли в сокете отметка о внеполосных данных .SH LIBRARY Standard C library (\fIlibc\fP, \fI\-lc\fP) .SH СИНТАКСИС .nf \fB#include \fP .PP \fBint sockatmark(int \fP\fIsockfd\fP\fB);\fP .fi .PP .RS -4 Требования макроса тестирования свойств для glibc (см. \fBfeature_test_macros\fP(7)): .RE .PP \fBsockatmark\fP(): .nf _POSIX_C_SOURCE >= 200112L .fi .SH ОПИСАНИЕ Функция \fBsockatmark\fP() возвращает значение, показывающее присутствует ли в сокете, на который ссылается файловый дескриптор \fIsockfd\fP, отметка о внеполосных данных (out\-of\-band mark). Если сокет имеет отметку, то возвращается 1; если сокет не имеет отметки, то возвращается 0. Эта функция не удаляет отметку о внеполосных данных. .SH "ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ" При успешном выполнении \fBsockatmark\fP() возвращает 1, если сокет имеет отметку о внеполосных данных, и 0, если нет. При ошибке возвращается \-1, и в \fIerrno\fP записывается номер ошибки. .SH ОШИБКИ .TP \fBEBADF\fP Значение \fIsockfd\fP не является правильным файловым дескриптором. .TP \fBEINVAL\fP .\" POSIX.1 says ENOTTY for this case Значение \fIsockfd\fP является файловым дескриптором, к которому не применима функция \fBsockatmark\fP(). .SH АТРИБУТЫ Описание терминов данного раздела смотрите в \fBattributes\fP(7). .TS allbox; lbx lb lb l l l. Интерфейс Атрибут Значение T{ .na .nh \fBsockatmark\fP() T} Безвредность в нитях MT\-Safe .TE .sp 1 .SH СТАНДАРТЫ POSIX.1\-2008. .SH ИСТОРИЯ glibc 2.2.4. POSIX.1\-2001. .SH ЗАМЕЧАНИЯ Если \fBsockatmark\fP() возвращает 1, то внеполосные данные можно прочитать используя флаг \fBMSG_OOB\fP в \fBrecv\fP(2). .PP Внеполосные данные поддерживаются только для некоторых потоковых сокетных протоколов. .PP Функцию \fBsockatmark\fP() можно безопасно вызывать из обработчика сигнала \fBSIGURG\fP. .PP Функция \fBsockatmark\fP() реализована с помощью \fBioctl\fP(2) с операцией \fBSIOCATMARK\fP. .SH ДЕФЕКТЫ До glibc 2.4, \fBsockatmark\fP() не работала. .SH ПРИМЕРЫ Следующий код можно использовать после получения сигнала \fBSIGURG\fP для чтения (и удаления) всех данных до отметки, и затем для чтения байта данных отметки: .PP .EX 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"); ... } } .EE .SH "СМ. ТАКЖЕ" \fBfcntl\fP(2), \fBrecv\fP(2), \fBsend\fP(2), \fBtcp\fP(7) .PP .SH ПЕРЕВОД Русский перевод этой страницы руководства был сделан Alexander Golubev , Azamat Hackimov , Hotellook, Nikita , Spiros Georgaras , Vladislav , Yuri Kozlov и Иван Павлов . .PP Этот перевод является бесплатной документацией; прочитайте .UR https://www.gnu.org/licenses/gpl-3.0.html Стандартную общественную лицензию GNU версии 3 .UE или более позднюю, чтобы узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ. .PP Если вы обнаружите ошибки в переводе этой страницы руководства, пожалуйста, отправьте электронное письмо на .MT man-pages-ru-talks@lists.sourceforge.net .ME .