绑定失败:无法分配请求的地址
发布时间:2020-12-16 09:43:18 所属栏目:百科 来源:网络整理
导读:我正在尝试编写一个侦听我机器上端口的C程序. 我遇到了一个奇怪的错误. 每当我尝试将套接字绑定到固定的ip(127.0.0.1或我的实际IP)时,我得到“绑定失败:无法分配请求的地址”错误. 但是,当我将INADDR_ANY作为要绑定的地址传递给bind时,它可以正常工作. 这是
我正在尝试编写一个侦听我机器上端口的C程序.
我遇到了一个奇怪的错误. 每当我尝试将套接字绑定到固定的ip(127.0.0.1或我的实际IP)时,我得到“绑定失败:无法分配请求的地址”错误. 这是我拥有的唯一两个IP,所以不能因为我可用的其他IP地址而使0.0.0.0正常工作. 这是代码: #include<sys/types.h> #include<stdio.h> #include<sys/socket.h> #include<netinet/in.h> #include<errno.h> #include<stdlib.h> #include<string.h> int main() { int port = 1234; /* port number */ int rqst; /* socket accepting the request */ socklen_t alen; /* length of address structure */ struct sockaddr_in my_addr; /* address of this service */ struct sockaddr_in client_addr; /* client's address */ int sockoptval = 1; int svc; /* create a TCP/IP socket */ if ((svc = socket(AF_INET,SOCK_STREAM,0)) < 0) { perror("cannot create socket"); exit(1); } /* allow immediate reuse of the port */ setsockopt(svc,SOL_SOCKET,SO_REUSEADDR,&sockoptval,sizeof(int)); /* bind the socket to our source address */ memset((char*)&my_addr,sizeof(my_addr)); /* 0 out the structure */ my_addr.sin_family = AF_INET; /* address family */ my_addr.sin_port = htons(port); //my_addr.sin_addr.s_addr = htonl(INADDR_ANY); /* Works! */ my_addr.sin_addr.s_addr = htonl(inet_addr("127.0.0.1")); /* Fails! */ if (bind(svc,(struct sockaddr *)&my_addr,sizeof(my_addr)) < 0) { perror("bind failed"); exit(1); } printf("Listening on %dn",my_addr.sin_addr.s_addr); /* set the socket for listening (queue backlog of 5) */ if (listen(svc,5) < 0) { perror("listen failed"); exit(1); } /* loop,accepting connection requests */ for (;;) { while ((rqst = accept(svc,(struct sockaddr *)&client_addr,&alen)) < 0) { /* we may break out of accept if the system call */ /* was interrupted. In this case,loop back and */ /* try again */ if ((errno != ECHILD) && (errno != ERESTART) && (errno != EINTR)) { perror("accept failed"); exit(1); } } /* the socket for this accepted connection is rqst */ } } 解决方法
函数inet_addr返回网络顺序中的地址:
所以放弃了htonl. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |