我正在创建一个客户端和一个服务器应用程序,我目前正在尝试建立一个连接。每当客户端试图连接到服务器时,服务器调用将接受返回-1。当我检查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);
}
}我的服务器代码做错了什么?
发布于 2014-11-17 13:55:03
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)https://stackoverflow.com/questions/26974179
复制相似问题