绑定UDP套接字时出错

时间:2015-10-29 04:10:11

标签: sockets udp bind ip-address

我有一个这样的程序。

{
              memset(&hints, 0, sizeof(struct addrinfo));
               /* fill the hints struct */
                hints.ai_flags = AI_PASSIVE;
                 hints.ai_socktype = SOCK_STREAM;
                //hints.ai_socktype = SOCK_DGRAM;
                hints.ai_protocol = 0;
                //hints.ai_protocol = IPPROTO_UDP;
                hints.ai_canonname = NULL;
                hints.ai_addr = NULL;
                hints.ai_next = NULL;


                if(iFamily == AF_INET)
                    hints.ai_family = AF_INET;


                else if(iFamily == AF_INET6)
                        hints.ai_family = AF_INET6;

         /* Code for getting gettaddressinfo */

                if(iFamily == AF_INET)
                {

                iRet = bind(SockIPC, res->ai_addr, sizeof(struct sockaddr_in));
                char sBuff[1024];
         sprintf(sBuff, "errno [%d] ", errno);
               fp=fopen("debug.log","a+");
               fprintf(fp,"IPv4 bind error\n ");
               fprintf(fp,"bind error = %s\n",sBuff);
               fclose(fp);
               fflush(stdout);
               }
}

在上面的代码中,我试图绑定一个创建的UDP套接字。

我收到以下绑定错误

  

绑定错误= 266

哪个地址已在使用中。

任何人都可以 让我知道我哪里错了。

1 个答案:

答案 0 :(得分:1)

这里没有任何问题的证据。只有当前一次系统调用返回-1时,才有效评估errnoperror("bind");会更简单:

if (bind(...) == -1)
{
    perror("bind");
}
else // continue with execution

然而几乎可以肯定是错误,如果不是266:EADDRINUSE是98,而不是266. SOCK_STREAMIPPROTO_UDP不会一起出现。您需要SOCK_DGRAMIPPROTO_UDP