【ただの技術備忘録】【第6回】LinuxC、ソケットプログラミング〜解説編3〜

3.bind関数でソケットを命名する

socketシステムコールで作成したソケットを、他のプロセスから利用できるようにソケットに命名する。他のプロセスから利用できるようにする、ということはIPやポートなどをソケットに関連付けるわけだが、その基本情報は前回既に作っているので、実際に割り当てるためにbind関数(システムコール)を使う。

#include <sys/socket.h>

int bind(int socket, const struct sockaddr *address, size_t address_len);

名前無しファイルディスクリプタsocketに対して、パラメータaddressを割り当てる。address_lenはアドレス構造体の長さ。パラメータaddressは、実際使用するソケットドメインによってサイズや構造体形式が異なるので、汎用アドレス型のsockaddr構造体にキャストして利用します。

今回は

server_len = sizeof(server_address);
bind(server_sockfd,(struct sockaddr *)&server_address,server_len);

としているので、1で生成したserver_sockfdに対しserver_address構造体を割り当てている。コレにより、server_sockfdはIP127.0.0.1、ポーロ7743として他のプロセスから利用できるようになった。bindシステムコールは、成功すると0を失敗すると-1を返しerrnoにそのエラーの値が格納される。

次回はキューと接続。