3 システムコール

3.0.1 概要

それでは,先ほどの例のプログラム,リスト1とリスト 2の実際の通信方法を確認する.

通信には,さまざまなシステムコールが使われる.通信で使われるシステムコールを表 1を示す.

表 1: 通信に使うシステムコール一覧.参考文献 [2]より,引用
ソケットの作製 socket()
ソケットに名前を付ける bind()
接続の受付準備 listen()
接続要求 connect()
データ転送 read(), write()
  recv(), send()
  recvfrom(), sendto()
ソケットのクローズ shutdown, close
その他 ioctl(), socketpair()
  setsockopt(), getsockopt()
  getsockname(), getpeername()

3.1 初期化処理

初期化処理は,ソケットを作製するsocket()システムコール2bind()システムコールから成っている.

3.1.0.1 socket()システムコール

ソケットと呼ばれる通信ポートを作製する役割があ る.サーバーおよびクライアントで通信を行うための口(ソケット)を作製すると考える. socket()システムコールを使うために必要なヘッダーファイルとそのプロトタイプ宣言を 以下に示す.
socket()システムコール
	#include <sys/socket.h>
	#inlcude <sys/types.h>

	int socket(int domain, int type, int protocol);
戻り値は,ファイルディスクリプターと呼ばれる整数値となる.この整数でソケットを区 別する.引数は3つある.引数の詳細については教科書 []に書いてある3ので,ここでは簡単にのべる.

3.1.0.2 bind()システムコール

ソケットに名前を付ける役割がある.具体的には,受 信ポート番号を指定する.
bind()システムコール
	#include <sys/socket.h>
	#inlcude <sys/types.h>

	int bind(int sock, struct sockaddr *addr, socket_t *addrlen);

3.2 接続受理準備

3.2.0.1 listen()システムコール

ソケットが,接続を待つソケットであることをOSに 伝える.
listen()システムコール
	#include <sys/socket.h>

	int listen(int sock, int backlog);

3.3 接続要求

3.3.0.1 connect()システムコール

クラインと側がサーバーに対して,接続の要求を出す.
connect()システムコール
	#include <sys/socket.h>
	#inlcude <sys/types.h>

	int connect(int sock, const struct sockaddr *addr, socket_t addrlen);

3.4 接続要求受理

3.4.0.1 accept()システムコール

ソケットに他のプログラム(プロセス)が接続してく るのを待ち,接続が完了したらファイルディスクリプタを戻り値として返す.受信には, このファイルディスクリプターを使う.
accept()システムコール
	#include <sys/socket.h>
	#inlcude <sys/types.h>

	int accept(int sock, struct sockaddr *addr, socket_t *addrlen);

3.5 データの送信

send()システムコール
	#include <sys/types.h>
	#include <sys/socket.h>

	ssize_t send(int s, const void *buf, size_t len, int flags);

3.6 データの受信

3.6.0.1 recv()システムコール

ソケットからメッセージを受け取る役割がある.
recv()システムコール
       #include <sys/types.h>
       #include <sys/socket.h>

       ssize_t recv(int s, void *buf, size_t len, int flags);

3.7 終了処理

3.7.0.1 close()システムコール

ファイルディスクリプターを閉じる.
recv()システムコール
       #include <unistd.h>

       int close(int fd);
引数は,ファイルディスクリプター(整数)である.
ホームページ: Yamamoto's laboratory
著者: 山本昌志
Yamamoto Masashi
平成19年10月17日


no counter