Udp 绑定套接字请求提供EADDRNOTAVAIL

Udp 绑定套接字请求提供EADDRNOTAVAIL,udp,Udp,我有一个小的C程序,试图绑定到某个ip:端口的套接字。这是节目- int main () { int udp_fd = -1; struct sockaddr_in sockaddr; char *ip = (char *)"xx.yyy.zzz.aaa"; int port = 1234; udp_fd = socket(AF_INET, SOCK_DGRAM, 0); if (udp_fd == -1) {

我有一个小的C程序,试图绑定到某个ip:端口的套接字。这是节目-

int main ()
{
    int udp_fd = -1;
    struct sockaddr_in sockaddr;

    char *ip = (char *)"xx.yyy.zzz.aaa";
    int port = 1234;
    udp_fd = socket(AF_INET, SOCK_DGRAM, 0);

    if (udp_fd == -1) {
       printf("Could not create socket\n");
       return -1;
    }

    sockaddr.sin_family = AF_INET;
    sockaddr.sin_addr.s_addr = inet_addr(ip);
    sockaddr.sin_port = htons(port);

    if (bind(udp_fd, (struct sockaddr *)&sockaddr, sizeof(sockaddr)) == -1) {
        printf("Could not bind to %s: %d: %d: %d\n", ip, port, errno, udp_fd);
        return -1;
    }

    if (fcntl(udp_fd, F_SETFL, O_NONBLOCK | O_ASYNC) < 0) {
        printf("Error setting socket as non-blocking \n");
        return -1;
    }

    return 0;
}
int main()
{
int udp_fd=-1;
sockaddr中的结构sockaddr_;
char*ip=(char*)“xx.yyy.zzz.aaa”;
int端口=1234;
udp_fd=套接字(AF_INET,SOCK_DGRAM,0);
如果(udp_fd==-1){
printf(“无法创建套接字\n”);
返回-1;
}
sockaddr.sin_family=AF_INET;
sockaddr.sin\u addr.s\u addr=inet\u addr(ip);
sockaddr.sinu port=htons(端口);
if(bind(udp_fd,(struct sockaddr*)&sockaddr,sizeof(sockaddr))=-1){
printf(“无法绑定到%s:%d:%d:%d\n”,ip,端口,错误号,udp\U fd);
返回-1;
}
if(fcntl(udp_fd,F_SETFL,O_NONBLOCK | O_ASYNC)<0){
printf(“错误设置套接字为非阻塞\n”);
返回-1;
}
返回0;
}
这在EADDRNOTAVAIL中失败

定义EADDRNOTAVAIL 99/*无法分配请求的地址*/ 我尝试从另一台设备连接到同一台服务器,该设备与绑定失败的另一台设备位于同一网络上,绑定成功


故障设备上没有启用防火墙。

您正在尝试将套接字绑定到非本地IP地址

您通常根本不需要绑定到特定的IP地址。更改:

sockaddr.sin_addr.s_addr = inet_addr(ip);


谢谢我会试试看。
sockaddr.sin_addr.s_addr = INADDR_ANY;