create_a_socket() はクライアントとの転送接続を作成するだけの関数です。
/*
* 関数: create_socket
*
* 目的: 応答待ちする TCP ソケットを開く
*
* 引数:
*
* port (r) 応答待ちするポート番号
*
* 戻り値: 成功した場合は、応答待ちするソケットのファイル記述子。
* 失敗した場合は -1。
*
* 効果:
*
* 指定されたポート上で応答待ちするソケットが作成され、そのファイル記述子が
* 戻される。エラーが発生した場合エラーメッセージが表示され -1 が戻される。
*/
int create_socket(port)
u_short port;
{
struct sockaddr_in saddr;
int s;
int on = 1;
saddr.sin_family = AF_INET;
saddr.sin_port = htons(port);
saddr.sin_addr.s_addr = INADDR_ANY;
if ((s = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
perror("creating socket");
return -1;
}
/* ソケットをすぐに再利用できるようにする */
(void) setsockopt(s, SOL_SOCKET, SO_REUSEADDR, (char *)&on,
sizeof(on));
if (bind(s, (struct sockaddr *) &saddr, sizeof(saddr)) < 0)
{
perror("binding socket");
(void) close(s);
return -1;
}
if (listen(s, 5) < 0) {
perror("listening on socket");
(void) close(s);
return -1;
}
return s;
}
|