Manpages

名 前

sockatmark − ど の ソ ケ ッ ト に 帯 域 外 (out−of−band) マ ー ク が 付 け ら れ て い る か を 調 べ る

書 式

#include <sys/socket.h>

int sockatmark(int sockfd);

glibc 向 け の 機 能 検 査 マ ク ロ の 要 件 (feature_test_macros(7) 参 照 ):

sockatmark(): _POSIX_C_SOURCE >= 200112L || _XOPEN_SOURCE >= 600

説 明

sockatmark() は フ ァ イ ル デ ィ ス ク リ プ タ ー sockfd で 参 照 さ れ る ソ ケ ッ ト に 帯 域 外 マ ー ク が 付 け ら れ て い る か 否 か を 返 す 。 ソ ケ ッ ト に マ ー ク が 付 け ら れ て い る 場 合 は 、 1 が 返 さ れ る 。 ソ ケ ッ ト に マ ー ク が 付 け ら れ て い な い 場 合 は 、 0 が 返 さ れ る 。 こ の 関 数 は 帯 域 外 マ ー ク を 削 除 し な い 。

返 り 値

sockatmark() の 呼 び 出 し が 成 功 し た 場 合 、 ソ ケ ッ ト に 帯 域 外 マ ー ク が 付 け ら れ て い れ ば 1 を 返 し 、 付 け ら れ て い な け れ ば 0 を 返 す 。 エ ラ ー の 場 合 は −1 が 返 さ れ 、 エ ラ ー を 表 す errno が 設 定 さ れ る 。

エ ラ ー

EBADF

sockfd が 有 効 な フ ァ イ ル デ ィ ス ク リ プ タ ー で な い 。

EINVAL

sockfdsockatmark() が 適 用 で き な い フ ァ イ ル デ ィ ス ク リ プ タ ー で あ る 。

バ ー ジ ョ ン

sockatmark() は glibc バ ー ジ ョ ン 2.2.4 で 追 加 さ れ た 。

属 性

マ ル チ ス レ ッ デ ィ ン グ (pthreads(7) 参 照 )

sockatmark() 関 数 は ス レ ッ ド セ ー フ で あ る 。

準 拠

POSIX.1−2001.

注 意

sockatmark() が 1 を 返 す 場 合 、 帯 域 外 デ ー タ は MSG_OOB を 指 定 し た recv(2) で 読 み 込 む こ と が で き る 。 帯 域 外 デ ー タ は 、 い く つ か の ス ト リ ー ム ソ ケ ッ ト プ ロ ト コ ル で し か サ ポ ー ト さ れ て い な い 。

sockatmark() は SIGURG シ グ ナ ル の ハ ン ド ラ ー か ら 安 全 に 呼 び 出 す こ と が で き る 。

sockatmark() は SIOCATMARK ioctl(2) 操 作 を 使 っ て 実 装 さ れ て い る 。

バ グ

glibc 2.4 よ り 前 の バ ー ジ ョ ン で は 、 sockatmark() は 動 作 し な い 。

以 下 の コ ー ド は 、 SIGURG シ グ ナ ル を 受 け 取 っ た 後 に マ ー ク ま で の 全 て の デ ー タ を 読 み 込 ん で (破 棄 し )、 マ ー ク さ れ た デ ー タ の バ イ ト を 読 み 込 む の に 使 用 で き る 。

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

こ の 文 書 に つ い て

こ の man ペ ー ジ は Linux man−pages プ ロ ジ ェ ク ト の リ リ ー ス 3.79 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は http://www.kernel.org/doc/man−pages/ に 書 か れ て い る 。