我想将我的服务附加到某个TCP端口以进行测试。然后,我会对该端口进行调用,确保服务正常运行,并将其关闭。我需要找到一种方法来生成这样的端口号,因为我无法使用固定的端口号 - 测试可能会并行运行。这是否可能?
我想将我的服务附加到某个TCP端口以进行测试。然后,我会对该端口进行调用,确保服务正常运行,并将其关闭。我需要找到一种方法来生成这样的端口号,因为我无法使用固定的端口号 - 测试可能会并行运行。这是否可能?
#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
struct sockaddr_in addr
初始化为 0
可能会导致未定义的行为,可能会导致应用程序崩溃。 - alkAF_UNSPEC
被定义为#define
的0
。 - alkaddr.sin_port
为零。 - yegor256addr.sin_port
以外的部分进行初始化。你需要将 .sin_family
初始化为 AF_INET
,.sin_addr.s_addr
初始化为 INADDR_ANY
。 - Robᵩ在绑定时指定端口号为0,然后使用getsockname()
来查找所分配的端口号,这样你就可以通过其他方式告诉客户端你正在侦听的端口号了。这种方法很少有用。