ITメモ
C言語 / Programming Language C




【C言語】[accept] :接続受入れ (サーバ側)

【C言語】
[accept] :接続受入れ (サーバ側)





[accept]コマンド


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