下载网页的关键函数:
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 发送超时