名 前
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 |
sockfd は sockatmark() が 適 用 で き な い フ ァ イ ル デ ィ ス ク リ プ タ ー で あ る 。 |
バ ー ジ ョ ン
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/ に 書 か れ て い る 。