gpt4 book ai didi

调用 accept() 给出 errno 14 错误地址

转载 作者:太空宇宙 更新时间:2023-11-04 08:34:11 26 4
gpt4 key购买 nike

我正在创建客户端和服务器应用程序,目前正在尝试建立连接。每当客户端尝试连接到服务器时,服务器调用 accept 返回 -1。当我检查从 accept() 设置的 errno 时,它是 14,代表错误地址。我创建套接字并接受的代码如下

  //create socket
if((listenfd=socket(AF_INET,SOCK_STREAM,0))<0)
{
fprintf(stderr, "Cannot create server socket! errno %i: %s\n",errno,strerror(errno));
exit(-1);
}

//bind to the socket
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_port = htons(port);


if( bind(listenfd, (struct sockaddr *) &servaddr, sizeof(servaddr))<0)
{
printf("Server bind failure errno %i: %s\n",errno,strerror(errno));
exit(-1);
}

// Turn 'listenfd' to a listening socket. Listen queue size is 5.

if(listen(listenfd,5) < 0)
{
printf("Server listen failure errno %i: %s\n",errno,strerror(errno));
exit(-1);
}
while(1)
{
//accept connections
if(newsock=accept(listenfd,(struct sockaddr*)&clientaddr,sizeof(clientaddr)<0))
{
printf("Server accept failure errno %i: %s\n",errno,strerror(errno));
exit(-1);
}
int ch=fork();
if(ch<0)
{
printf("Fork failure errno %i: %s\n",errno,strerror(errno));
exit(-1);
}
else if (ch==0)
{
char buff[100];

int rc;
rc=recv(listenfd,buff,sizeof(buff),0);
if(rc<0)
{
printf("Receive failure errno %i: %s\n",errno,strerror(errno));
exit(-1);
}

printf("%s",buff);
exit(-1);
}

}

我的服务器代码哪里做错了?

最佳答案

if(newsock=accept(listenfd,(struct sockaddr*)&clientaddr,sizeof(clientaddr)<0))

在您的代码中 sizeof(clientaddr)<0评估为 0 并传递给 accept作为最后一个参数。替换为:

int addrlen;
...
addrlen = sizeof(clientaddr);
if((newsock=accept(listenfd,(struct sockaddr*)&clientaddr,&addrlen))<0)

关于调用 accept() 给出 errno 14 错误地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26974179/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com