#include
#include
#include
#include
#include
#include
#include
#include
#include
#define SERV_PORT 8031
int main(void)
{
int lfd, cfd;
struct sockaddr_in serv_addr,clin_addr;
socklen_t clin_len;
pid_t pid;
char buf[1024];
int len;
if((lfd = socket(AF_INET,SOCK_STREAM,0)) == -1){
perror("create socket failed");
exit(1);
}
int opt = 1;
setsockopt(lfd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt));
memset(&serv_addr, 0, sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);
serv_addr.sin_port = htons(SERV_PORT);
if(bind(lfd, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) == -1)
{
perror("bind error");
exit(1);
}
if(listen(lfd, 128) == -1)
{
perror("listen error");
exit(1);
}
clin_len = sizeof(clin_addr);
signal(SIGCLD,SIG_IGN);
while(1)
{
if((cfd = accept(lfd, (struct sockaddr *)&clin_addr, &clin_len)) == -1)
{
perror("accept error");
exit(1);
}
pid = fork();
if (pid > 0)
{
// 在父进程中关闭连接的套接字描述符,只是把 cfd 的引用数减少1,在子进程中还在使用 cfd
close(cfd);
}
else if (pid == 0)
{
// 子进程关闭 lfd 处理任务,使其回到 TIME_WAIT 状态值
close(lfd);
char web_result[] = "HTTP/1.1 200 OK\r\nContent-Type:text/html\r\nContent-Length: 11\r\nServer: mengkang\r\n\r\nhello world";
write(cfd,web_result,sizeof(web_result));
close(cfd);
}
else
{
perror("fork error");
exit(1);
}
}
close(lfd);
return 0;
}
上面代码运行起来之后,能对外提供服务,但是在服务器这边查看会有accept error: Bad file descriptor的错误信息,我wget了下,发现一次请求就一次报错,但是内容却是请求到了的。