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