因为代码有500行,相对较长,这里不再按照源代码的顺序,而是按照调用关系,先main,后一个个方法展开
int main(void)
{
int server_sock = -1;
//----------该httpd的服务socket的fd ,声明
u_short port = 4000;
//---------- 默认端口 4000
int client_sock = -1;
//---------- server_sock每接受到一个新的连接,就会创建一个新的socket,服务器(本机) 通过该socket与客户机进行通讯
//----------- server_sock继续监听其他的连接请求
struct sockaddr_in client_name;
//----------- accept会将客户机的地址信息,本程序好像只是声明了这个变量,没有使用
socklen_t client_name_len = sizeof(client_name);
//----------- 客户机的地址信息占用的空间
pthread_t newthread;
//----------- 每当接受一个新的请求,创建一个新的连接(同时创建一个新的client_sock)来处理
server_sock = startup(&port);
//---------- 这是服务器监听端口的启动函数,后续会展开分析,返回server_sock的fd
printf("httpd running on port %d\n", port);
while (1)
{
//--------- 死循环,持续监听请求
client_sock = accept(server_sock,
(struct sockaddr *)&client_name,
&client_name_len);
//---------- 调用accept方法,接受连接请求
if (client_sock == -1)
//----------- 失败则打印error信息
error_die("accept");
/* accept_request(&client_sock); */
if (pthread_create(&newthread , NULL, (void *)accept_request, (void *)&client_sock) != 0)
//--------- 成功则创建新的线程,调用accept_request来处理,accept_request通过client_sock与客户机通讯
perror("pthread_create");
}
close(server_sock);
return(0);
}