Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.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 套接字绑定()正在使用不可用的地址_C_Sockets_Bind_Icmp - Fatal编程技术网

C 套接字绑定()正在使用不可用的地址

C 套接字绑定()正在使用不可用的地址,c,sockets,bind,icmp,C,Sockets,Bind,Icmp,当我试图将一个不可用的地址绑定到icmp套接字时,就像没有分配给任何接口的东西一样,它绑定到它而不会抛出任何错误。我做错什么了吗 if (c->pc_saddr.ps_len == sizeof(saddr.sin_addr.s_addr)) { bzero(&saddr, sizeof(saddr)); saddr.sin_len = sizeof(saddr); saddr.sin_family = AF_INET; bcopy(c->p

当我试图将一个不可用的地址绑定到icmp套接字时,就像没有分配给任何接口的东西一样,它绑定到它而不会抛出任何错误。我做错什么了吗

if (c->pc_saddr.ps_len == sizeof(saddr.sin_addr.s_addr)) {

    bzero(&saddr, sizeof(saddr));
    saddr.sin_len = sizeof(saddr);
    saddr.sin_family = AF_INET;
    bcopy(c->pc_saddr.ps_data, &saddr.sin_addr.s_addr,
          c->pc_saddr.ps_len);

    /*
     * note: if bind fails, just log it & let the kernel decide on the
     * source address to use.
     */
    if (bind(icmp_socket.ps_socket_fd, (struct sockaddr*)&saddr, sizeof(saddr)) != 0) {

        trace(TRACEFLAG_GENERAL, "%s: bind failed icmp: %s",
                   __FUNCTION__, strerror(errno));
    }
}

定义“不可用”。正如我前面所说,它是一个32位的有效IP地址,但没有分配给任何本地接口。因此不可用。通常它会失败并将errno设置为EADDRNOTAVAIL。如果您运行Linux,可能您的机器设置了启用非本地绑定的选项,请参阅。