connect_to_server() は TCP 接続を作成するだけの基本的な関数です。
/* * 関数: connect_to_server * * 目的: 指定されたホストとポートへの TCP 接続を開く * * 引数: * * host (r) ターゲットのホスト名 * port (r) ターゲットのポート。ホストのバイト順。 * * 戻り値: 成功した場合は、確立されたソケットのファイル記述子。 * 失敗した場合は -1。 * * 効果: * * ホスト名が gethostbyname() で解釈処理され、ソケットが開かれ、 * 接続される。エラーが発生した場合、エラーメッセージが表示され、 * -1 が戻される。 */ int connect_to_server(host, port) char *host; u_short port; { struct sockaddr_in saddr; struct hostent *hp; int s; if ((hp = gethostbyname(host)) == NULL) { fprintf(stderr, "Unknown host: %s\n", host); return -1; } saddr.sin_family = hp->h_addrtype; memcpy((char *)&saddr.sin_addr, hp->h_addr, sizeof(saddr.sin_addr)); saddr.sin_port = htons(port); if ((s = socket(AF_INET, SOCK_STREAM, 0)) < 0) { perror("creating socket"); return -1; } if (connect(s, (struct sockaddr *)&saddr, sizeof(saddr)) < 0) { perror("connecting to server"); (void) close(s); return -1; } return s; } |