Udp 绑定套接字请求提供EADDRNOTAVAIL
我有一个小的C程序,试图绑定到某个ip:端口的套接字。这是节目-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) {
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;