错误accept: Bad file descriptor怎么解决??

Web、Mail、Ftp、DNS、Proxy、VPN、Samba、LDAP 等基础网络服务
回复
lmy_86263
帖子: 2
注册时间: 2014-07-30 23:26
系统: ubuntu 14.04

错误accept: Bad file descriptor怎么解决??

#1

帖子 lmy_86263 » 2014-08-04 20:09

#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <unistd.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#define SERVPORT 3333
#define BACKLOG 10
#define MAX_CONNECTED_NO 10
#define MAXDATASIZE 100

int main()
{
struct sockaddr_in server_sockaddr,client_sockaddr;
int sin_size,recvbytes;
int sockfd,client_fd;
char recvbuf[MAXDATASIZE];

/*建立 socket 连接*/
//if((sockfd = socket(AF_INET,SOCK_STREAM,0)) == -1);
if((sockfd = socket(AF_INET,SOCK_STREAM,0)) == -1)//先是赋值操作符后为逻辑操作符
{
perror("socket");
exit(1);
}
printf("socket success!,sockfd=%d\n",sockfd);
printf("%d\n",sockfd);

/*设置 sockaddr_in 结构体中相关参数*/
server_sockaddr.sin_family=AF_INET;
server_sockaddr.sin_port=htons(SERVPORT);
server_sockaddr.sin_addr.s_addr=INADDR_ANY;
bzero(&(server_sockaddr.sin_zero),8);
/*绑定函数 bind*/
if(bind(sockfd,(struct sockaddr *)&server_sockaddr,sizeof( struct sockaddr))== -1)
{
perror("bind");
exit(1);
}
printf("bind success!\n");

/*调用 listen 函数*/
if(listen(sockfd,BACKLOG)== -1)
{
perror("listen");
exit(1);
}
printf("listening....\n");

while(1)
{
printf("server waiting\n");
/*调用 accept 函数,等待客户端的连接*/
client_fd = accept(sockfd,(struct sockaddr *)&client_sockaddr,&sin_size);
if(client_fd == -1)
{
perror("accept");
exit(1);
}

/*调用 recv 函数接收客户端的请求*/
if((recvbytes=recv(client_fd,recvbuf,MAXDATASIZE,0))== -1)
{
perror("recv");
exit(1);
}
printf("%s\n",recvbuf);
//send(client_fd,"get that",10,0);
close(client_fd);//关闭监听套接字
sleep(1);
}
exit(0);
}
ouxiaofei
帖子: 1
注册时间: 2014-08-15 9:18
系统: ubuntu

Re: 错误accept: Bad file descriptor怎么解决??

#2

帖子 ouxiaofei » 2014-08-15 9:24

把close(client_fd);放到while(1)循环外面就可以了,即

...
sleep(1);
}

close(client_fd);//关闭监听套接字

我的就是这样改过来的
windild
帖子: 1
注册时间: 2011-07-02 22:51

Re: 错误accept: Bad file descriptor怎么解决??

#3

帖子 windild » 2015-06-19 10:39

果然有用,我也遇到这个问题了。
回复