9

テスト目的で、サービスをTCPポートに接続したいと思います。次に、このポートに電話をかけ、サービスが機能することを確認して、シャットダウンします。固定ポート番号を使用できないため、このようなポート番号を生成する方法を見つける必要があります。テストは並行して実行される可能性があります。出来ますか?

4

2 に答える 2

6

これが私のやり方です:

#include <stdio.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>

int main() {
    struct sockaddr_in addr;
    socklen_t len = sizeof(addr);
    addr.sin_port = 0;
    int sock = socket(AF_INET, SOCK_STREAM, 0);
    if (sock < 0) {
        perror("socket()");
        return -1;
    }
    if (bind(sock, (struct sockaddr*) &addr, sizeof(addr)) != 0) {
        perror("bind()");
        return -1;
    }
    if (getsockname(sock, (struct sockaddr*) &addr, &len) != 0) {
        perror("getsockname()");
        return -1;
    }
    printf("%d\n", addr.sin_port);
    return 0;
}

次に、それをコンパイルして実行します。

cc -o reserve reserve.c && ./reserve

また、バインドに使用できるポート番号を出力します。

ツールのフルバージョンをGithubで公開しました:https ://github.com/yegor256/random-tcp-port

于 2012-11-09T12:27:29.377 に答える
2

バインド時にポートゼロを指定するだけです。次に、を使用getsockname()して割り当てられたポートを確認します。これにより、リッスンしているポートを別の方法でクライアントに伝えることができます。めったに役に立ちません。

于 2012-11-09T20:45:32.000 に答える