EN JA
SOCKATMARK(3)
SOCKATMARK(3) FreeBSD Library Functions Manual SOCKATMARK(3)

名称

sockatmark読み込みポインタが OOB マークにあるかどうか決定する

ライブラリ

Standard C Library (libc, -lc)

書式

#include < sys/socket.h>

int
sockatmark( int s);

解説

読み込みポインタが現在データストリームでマークを指しているかどうか見つけるために、 sockatmark() 関数は提供されています。 sockatmark() が 1 を返すなら、次の読み込みはマークの後のデータを返します。そうでなければ (帯域外データが到着したと仮定して)、次の読み込みが帯域外信号の送信の前にクライアントによって送信されたデータを提供します。このルーチンは以下に示される、割り込みまたは終了シグナルを受け取るときに、出力をフラッシュするためにリモートログインプロセスで使用されます。それは、(それを捨てるために) マークまでの正常なデータを読み込んで、次に、帯域外バイトを読み込みます。

#include <sys/socket.h> 
... 
oob() 
{ 
 int out = FWRITE, mark; 
 char waste[BUFSIZ]; 
 
 /* flush local terminal output */ 
 ioctl(1, TIOCFLUSH, (char *)&out); 
 for (;;) { 
  if ((mark = sockatmark(rem)) < 0) { 
   perror("sockatmark"); 
   break; 
  } 
  if (mark) 
   break; 
  (void) read(rem, waste, sizeof (waste)); 
 } 
 if (recv(rem, &mark, 1, MSG_OOB) < 0) { 
  perror("recv"); 
  ... 
 } 
 ... 
}

戻り値

成功して終了すれば、 sockatmark() 関数は、読み込みポインタが OOB マークを指しているなら、値 1 を返し、そうでなければ 0 を返します。そうでなければ、値-1 が返され、グローバル変数 errno にエラーを示す値が設定されます。

エラー

sockatmark() 呼び出しは、次の場合に失敗します:
[ EBADF]
s 引数が、有効な記述子ではありません。
[ ENOTTY]
s 引数ソケットではなく、ファイルの記述子です。

関連項目

recv(2), send(2)

歴史

sockatmark() 関数は、歴史的な SIOCATMARK ioctl(2) を標準化するために IEEE Std 1003.1-2001 (“POSIX.1”) によって導入されました。 ENOTTY エラーは SIOCATMARK の歴史的な振る舞いに一致する通常の ENOTSOCK の代わりです。
October 13, 2002 FreeBSD