为什么accept总失败
刚学习unix网络编程,为什么accept总失败,求指点
#include <stdio.h>
#include <netinet/in.h> //定义的所有INADDR_的常量都是主机字节序
#include <sys/types.h>
#include <sys/socket.h>
#include <strings.h>
#include <stdlib.h>
#include <errno.h>
void str_echo(int sockfd);
int main() {
int sockfd, connfd;
socklen_t chilen;
pid_t childpid;
struct sockaddr_in servaddr,cliaddr;
if(sockfd = socket(AF_INET, SOCK_STREAM, 0)<0)
printf("erro\n");
bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(8888);
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);//IPv4通配地址,一般为0
int ret = bind(sockfd, (struct sockaddr*)&servaddr, sizeof(servaddr));//bind成功返回0,失败返回-1
if(ret < 0)
printf("error...\n");
listen(sockfd, 5);//完成队列和未完成队列
int clilen = sizeof(cliaddr);
for(;;) {
connfd = accept(sockfd,(struct sockaddr*)&cliaddr,&clilen );//第二个参数返回取得的客户端的协议地址和端口
if(connfd < 0)//若成功返回非负描述符,出错则为1
printf("accept error!!!\n");
if( (childpid = fork())== 0) {
/*
获得客户端的ip地址和端口
*/
char buf[1000];
printf("connection from %s, port %d\n",inet_ntop(AF_INET,&cliaddr.sin_addr, buf,sizeof(buf)),ntohs(cliaddr.sin_port));
close(sockfd);
str_echo(connfd);
exit(0);
}
close(connfd);
}
return 0;
}
void str_echo(int sockfd) {
int n;
char buf[100];
again:
while((n = read(sockfd, buf ,100))>0) //服务器读入数据,并把它们回射给客户,注意read和write的参数都是sockfd
write(sockfd, buf, n);
if( n<0&& errno == EINTR)
goto again;
else if(n<0)
printf("read error");
}