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