C语言 将接口地址传递到绑定中的方法



我正在工作 UDP 应用程序,我不确定我是否做得对。我需要将地址输入addr.sin_addr.s_addr.到目前为止,我只是使用了addr.sin_addr.s_addr = htonl(INADDR_ANY)但是我需要从用户那里设置特定的地址。当我使用addr.sin_addr.s_addr = htonl(adresa)时,我做得对吗?

完整代码:

int main(int argv, char **argc)
{
    strcpy(adresa, "someadress");
    int optval;
    struct sockaddr_in addr;//, incoming_addr;
    /* create socket */
    sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP);
    if (sock < 0)
    {
        err("socket()");
    }
    /* set reusable flag */
    optval = 1;
    setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof(optval));
    /* prepare inet address */
    memset(&addr, 0, sizeof(addr));
    addr.sin_family = AF_INET;
    addr.sin_port = htons(port);
    if(strcmp(adresa, "-") == 0)
    {
        addr.sin_addr.s_addr = htonl(INADDR_ANY); /* listen on all interfaces */        
    }
    else
    {
        addr.sin_addr.s_addr = htonl(adresa); /* listen on all interfaces */
    }

    if (bind(sock, (struct sockaddr*)&addr, sizeof(addr)) < 0)
    {
        err("bind");
    }
    for(;;)
    {
    }
    return 0;
}

最简单的方法是使用inet_addr函数,它可以获取IPv4地址并将其转换为网络字节顺序的地址作为in_addr_t。 然后可以将此值存储在sin_addr.s_addr中:

addr.sin_addr.s_addr = inet_addr(adresa);

最新更新