C 套接字绑定()正在使用不可用的地址
当我试图将一个不可用的地址绑定到icmp套接字时,就像没有分配给任何接口的东西一样,它绑定到它而不会抛出任何错误。我做错什么了吗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
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,可能您的机器设置了启用非本地绑定的选项,请参阅。