3

私が取り組んでいるアプリケーションは、複数 (現在は 4 つ) のポート番号をリッスンできるはずです。次のように、これらのポートごとにソケットを作成する必要がありますか?

if((sock_fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
    perror("error: could not create UDP socket\n");
    exit(EXIT_FAILURE);
}

bzero(&sock_addr, sizeof(sock_addr));
sock_addr.sin_family    = AF_INET;
sock_addr.sin_port      = htons(port1);
sock_addr.sin_addr.s_addr   = inet_addr(INADDR_ANY);

if(bind(sock_fd, (struct sockaddr *) &sock_addr, sock_len) < 0) {
    perror("error: could not bind UDP socket to AU\n");
    exit(EXIT_FAILURE);
}

または、それを行うためのよりエレガントな方法はありますか? また、私はselect()声明について読みましたが、それは私が使用すべきものでしょうか? 複数のポートでリッスンする理由は非常に単純です。通信しているアプリケーションを識別する必要があります。たとえば、ポートごとに 1 つのアプリケーション。

コメントありがとうございます。

// 更新: ポートごとに 1 つのソケットを設定するにはどうすればよいですか?

4

1 に答える 1

5

はい、通信する (IP、ポート) 番号のペアごとに個別のソケットが必要です。

そして、はい、select()関数を絶対に使用して(言語の一部であることを意味する「ステートメント」ではなく、ライブラリ内の関数にすぎません)、複数のソケットをすべて設定したら、それらにサービスを提供できます。

于 2012-05-15T09:18:39.997 に答える