GSS-API のプログラミング

connect_to_server()

connect_to_server() は TCP 接続を作成するだけの基本的な関数です。


例 A–7 connect_to_server()


/*
 * 関数: 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;
}