概述
继startup之后,主函数进入无限循环,首先调用accept函数。
accept原型:
#include<sys/socket.h>
int accept(int sockfd, struct sockaddr *cliaddr, socklen_t *addrlen);
返回:成功返回非负描述符,出错返回-1
如果accept成功,那么其返回值是由内核自动生成的一个全新描述符,代表与所返回客户端的TCP连接。
之后创建一个新线程通过accept_request处理请求。
accept_request()如下:
void *accept_request(void *client1)
{
int client = *(int *)client1;
char buf[1024]; //缓冲区
int numchars; //读取字符计数
char method[255]; //http请求method
char url[255];
char path[512];
size_t i, j;
struct stat st;
int cgi = 0; /* becomes true if server decides this is a CGI
* program */
char *query_string = NULL;
numchars = get_line(client, buf, sizeof(buf));
i = 0; j = 0;
while (!ISspace(buf[j]) && (i < sizeof(method) - 1))
{
method[i]