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