C言語-accept関数



acceptシステムコール

コネクションの確立時に、該当するソケットへの接続を待つ動作を用意します。

クライアントからの接続要求に合わせて、listen()でキューイングしたソケットを取り出します。


#include<sys/socket.h>
int accept(int socket, struct sockaddr *address, size_t *address_len);

引数

socket ソケット記述子
address 呼び出し側のクライアントのアドレスポインタ
address_len アドレス構造体の長さ

戻り値

新しいソケットファイルディスクリプタ 成功(保留中のクライアント接続がある場合)
-1 失敗

戻り値が失敗(-1)の場合のerrnoの値:


EWOULDBLOCK O_NUNBLOCKが指定されていて保留中の接続が無い場合に発生する。

O_NUNBLOCKを指定するには:

ソケットキューに接続が無い場合、クライアントが接続してくるまでサーバはacceptでブロックされる。

ただしこの動作は、fcntl関数を使ってソケットのファイルディスクリプタにO_NONBLOCKフラグを指定することで変更することができる。

int flag = fcntl(socket, F_GETFL, 0);
fcntl(socket, F_SETFL, O_NONBLOCK|flags);

関連

C言語-ソケットプログラミング



スポンサード リンク