我試圖使用功能getaddrinfo
與被動套接字/偵聽器,而不是直接填充舊的sockaddr
結構。 我的目的是打開一個套接字並將其綁定到一個端口。基本上我正在建立一個服務器。getaddrinfo返回2結果與本地主機
我不知道爲什麼,但getaddrinfo
返回2個結果;因爲在第二次下面的循環中,我調用了bind,它會退出,並顯示「地址已被使用」的錯誤。 你知道如何解決這個問題,如果它是正確的,它在一個循環?
struct addrinfo addr;
memset(&addr,0,sizeof(addrinfo));
addr.ai_family = AF_INET;
addr.ai_socktype = SOCK_STREAM;
addr.ai_protocol = 0;
addr.ai_flags = AI_PASSIVE;
struct addrinfo * rp,* result;
getaddrinfo("localhost","59001",&addr,&result);
for(rp = result; rp != NULL; rp = rp->ai_next){
int sd = socket(AF_INET, SOCK_STREAM, 0);
if(-1==sd){
printf("error creating the socket %m");
return -1;
}
if(-1==bind(sd, result->ai_addr, result->ai_addrlen)){
printf("error binding %m")
return -1;
}
if(-1== listen(sd, MAX_BACKLOG)){
std::cerr << "listen didn't work" << std::endl;
return -1;
}
}
好了,該男子頁說:「返回一個或多個addrinfo中的結構」。你應該在兩個結果中選擇正確的一個。 –
謝謝你。這將解決並完成我的工作! –