我正在创建客户端和服务器应用程序,我目前正在尝试建立连接。每当客户端尝试连接到服务器时,服务器调用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);
}
}
我的服务器代码出错了什么?
答案 0 :(得分:2)
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)