绑定到特定地址但随机端口Linux

时间:2015-08-12 19:50:03

标签: c linux sockets

是否有一种惯用的方法来指定要绑定的特定地址,但是是一个随机端口?

在我的应用程序中,我打开了几十个连接。我在connect()之前调用bind(),以便我可以指定应该与之建立连接的IP地址。但是,我必须自己找一个开放的端口。它现在工作正常,但如果我需要打开数千个连接,它可能会成为一个问题,因为找到一个开放的端口将变得越来越慢

int fd;
struct sockaddr_in addr;

fd = socket(AF_INET, SOCK_STREAM, 0);

while (TRUE)
{
    addr.sin_family = AF_INET;
    addr.sin_addr.s_addr = inet_addr("192.168.0.1");
    addr.sin_port = htons((rand() % 65000) + 1);

    if (bind(fd, (struct sockaddr *)&addr, sizeof (struct sockaddr_in)) == 0)
        break;
}

我考虑过编写自己的“端口管理”系统,但我想我会先尝试看看操作系统是否已有功能,然后继续操作

1 个答案:

答案 0 :(得分:5)

只需将addr.sin_port设为零即可。操作系统会为您挑选一个。

bind之后,您可以致电getsockname找出您绑定的端口。