Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 绑定到特定地址但随机端口Linux_C_Linux_Sockets - Fatal编程技术网

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

C 绑定到特定地址但随机端口Linux,c,linux,sockets,C,Linux,Sockets,是否有一种惯用的方法来指定要绑定到的特定地址,而不是随机端口 在我的应用程序中,我打开了几十个连接。我在connect()之前调用bind(),这样我就可以指定应该建立连接的IP地址。然而,我必须自己找到一个开放的端口。目前它工作正常,但如果我需要打开数千个连接,这可能会成为一个问题,因为找到一个打开的端口将变得越来越慢 int fd; struct sockaddr_in addr; fd = socket(AF_INET, SOCK_STREAM, 0); while (TRUE) {

是否有一种惯用的方法来指定要绑定到的特定地址,而不是随机端口

在我的应用程序中,我打开了几十个连接。我在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;
}

我曾考虑编写自己的“端口管理”系统,但我想我会先看看操作系统是否已经有了一个功能,然后再继续操作,只需将
addr.sinu port
设置为零即可。操作系统将为您选择一个


bind
之后,您可以调用
getsockname
查找绑定到的端口。

只需将
addr.sinu port
设置为零。操作系统将为您选择一个


bind
之后,您可以调用
getsockname
查找绑定到的端口。

我不会将它标记为重复,因为它引用的是不同的语言,但本质上是相同的:我不会将它标记为重复,因为它引用的是不同的语言,但本质上是相同的: