我有一个这样的程序。
{
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
哪个地址已在使用中。
任何人都可以 让我知道我哪里错了。
答案 0 :(得分:1)
这里没有任何问题的证据。只有当前一次系统调用返回-1时,才有效评估errno
,perror("bind");
会更简单:
if (bind(...) == -1)
{
perror("bind");
}
else // continue with execution
然而几乎可以肯定是错误,如果不是266:EADDRINUSE
是98,而不是266. SOCK_STREAM
和IPPROTO_UDP
不会一起出现。您需要SOCK_DGRAM
和IPPROTO_UDP
。