我想将我的服务附加到某个TCP端口,以进行测试。然后,我将调用此端口,确保服务正常工作,并将其关闭。我需要找到一种方法来生成这样的端口号,因为我不能使用固定的端口号 - 测试可以并行运行。有可能吗?
答案 0 :(得分:5)
我就是这样做的:
#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
答案 1 :(得分:0)
绑定时只需指定端口0;然后使用getsockname()找出分配的端口。