下载网页的关键函数:

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  发送超时

wget www.baidu.com执行流程分析的更多相关文章

  1. 报时机器人的rasa shell执行流程分析

      本文以报时机器人为载体,介绍了报时机器人的对话能力范围.配置文件功能和训练和运行命令,重点介绍了rasa shell命令启动后的程序执行过程. 一.报时机器人项目结构 1.对话能力范围 (1)能够 ...

  2. 深入浅出Mybatis系列(十)---SQL执行流程分析(源码篇)

    最近太忙了,一直没时间继续更新博客,今天忙里偷闲继续我的Mybatis学习之旅.在前九篇中,介绍了mybatis的配置以及使用, 那么本篇将走进mybatis的源码,分析mybatis 的执行流程, ...

  3. ThinkPHP 框架执行流程分析

    总体来说,应用的流程涉及到几个文件:Index.phpThinkPHP.phpThink.class.phpApp.class.phpDispatcher.class.phpThinkPHP/Mode ...

  4. Spring 文件上传MultipartFile 执行流程分析

    在了解Spring 文件上传执行流程之前,我们必须知道两点: 1.Spring 文件上传是基于common-fileUpload 组件的,所以,文件上传必须引入此包 2.Spring 文件上传需要在X ...

  5. [转]两表join的multi update语句在MySQL中的执行流程分析

    出自:http://hedengcheng.com/?p=209 两表join的multi update语句,执行结果与预计不一致的分析过程 — multi update结论在实际应用中,不要轻易使用 ...

  6. Hive SQL执行流程分析

    转自 http://www.tuicool.com/articles/qyUzQj 最近在研究Impala,还是先回顾下Hive的SQL执行流程吧. Hive有三种用户接口: cli (Command ...

  7. spark-sql执行流程分析

    spark-sql 架构 图1 图1是sparksql的执行架构,主要包括逻辑计划和物理计划几个阶段,下面对流程详细分析. sql执行流程 总体流程 parser:基于antlr框架对 sql解析,生 ...

  8. 深入浅出Mybatis系列十-SQL执行流程分析(源码篇)

    注:本文转载自南轲梦 注:博主 Chloneda:个人博客 | 博客园 | Github | Gitee | 知乎 最近太忙了,一直没时间继续更新博客,今天忙里偷闲继续我的Mybatis学习之旅.在前 ...

  9. Dalvik模式下System.loadLibrary函数的执行流程分析

    本文博客地址:http://blog.csdn.net/qq1084283172/article/details/78212010 Android逆向分析的过程中免不了碰到Android so被加固的 ...

随机推荐

  1. Oracle文章中常用数据表的描述

    desc stud; 名称   空值       类型           ---- -------- ------------ ID   NOT NULL NUMBER(38)   NAME     ...

  2. DW 做一个table表 对单元格进行合并

    编辑前的代码 <body> <table width="500" border="0" bgcolor='#000000' backgroun ...

  3. RouterOS(ROS)修改vrrp的mac地址

  4. 1016. 部分A+B

    /* * Main.c * 1016. 部分A+B * Created on: 2014年8月30日 * Author: Boomkeeper *******测试通过********* */ #inc ...

  5. In Depth : Android Shutdown Sequence

    What happened when I long press power button ?What is shutdown sequence ?How is it different from de ...

  6. jcSQL词法分析器对字符串token的解析

    上星期写完词法分析器的时候,曾遇上一个无关紧要却X疼的问题.毕竟是第一次完整地写整个语言的编译器(暂且这么叫着吧,解释器更靠谱),由于经验不足,在字符串解析这一块驻足了两天才解决掉,这里记录下来供以后 ...

  7. MySQL----information-schema数据库相关权限的说明。

    MySQL中的information_schema数据库比较特别有如下几个要注意的地方. 1.就算是一个新创建的用户,也就是说这个用户只有一个usage权限.它都可以查看informatoin_sch ...

  8. Qt 中程序自动重启

    参照至 dbzhang老师的博文,记录于此....... 要想理解重启,先得看看Qt程序怎么退出! 1.退出 int main(int argc, char** argv) { QApplicatio ...

  9. Linux 下防火墙端口设置

    方式1:     /sbin/iptables -I INPUT -p tcp --dport 8011 -j ACCEPT  #开启8011端口      /etc/rc.d/init.d/ipta ...

  10. C++STL_类模板举例

    #include<stdio.h> #include<typeinfo.h> template <class T1,class T2> class A{ T1 i; ...