wget www.baidu.com执行流程分析

下载网页的关键函数:

 

main.c(main) b 1394

url_parse:解析url,获取url相关信息,返回结构体 struct url 的指针,存于 url_parsed

retrieve_url:主要参数 url_parsed ,下载文件,下载网页的关键函数

retr.c(retrieve_url) b 736

http_loop,通过 HTTP 下载指定文件

http.c(http_loop) b 2769

gethttp, 获取文档

http.c(gethttp) b 1819

connect_to_host:给定域名和端口号,建立TCP连接

request_send:发送HTTP请求

read_http_response_head:读取HTTP响应

 

程序使用阻塞超时IO模式,超时实现方式:利用SIGALRM信号和select多路复用函数

1,connect_to_host主要包含域名解析,创建套接字,利用套接字连接服务器。

  解析域名时,使用协议无关函数 getaddrinfo ,设置了超时,SIGALRM

  connect套接字时,设置了超时,SIGALRM

2,request_send,构造发送字符串,循环写套接字,确保字符串全部写到套接字。

  发送请求时,设置套接字可读超时,若在指定时间内,套接字不可读,即发送的请求,未收到响应,则超时。利用 select 实现

3,read_http_response_head,循环读取数据,也设置了超时,select实现。

 

阻塞超时设置方法:(三种)

1,利用SIGALRM信号:alarm(nsec)设置超时,若超时,产生SIGALRM信号,信号处理。可能干扰进程中现有的alarm调用。

2,利用IO复用函数设置超时,主要有select,poll,epoll。

3,套接字选项设置,  SO_RCVTIMEO  接收超时

             SO_SNDTIMEO  发送超时

posted @ 2015-08-10 20:37  湛雷冲  阅读(683)  评论(0编辑  收藏  举报