GSS-API のプログラミング

create_a_socket()

create_a_socket() はクライアントとの転送接続を作成するだけの関数です。


例 A–14 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;
}