下载网页的关键函数:

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. hbase namespace问题

    如果遇到进入shell之后HMaster自动挂掉的问题,并且master的log里出现“TableExistsException: hbase:namespace”字样,很可能是更换了Hbase的版本 ...

  2. [string]Valid Parentheses

    Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if the inpu ...

  3. jquery精简选项卡

    <!DOCTYPE html><html><head lang="en">    <meta charset="UTF-8&qu ...

  4. css reset 以及哪些元素有默认margin padding值

    很多网站在css reset 的时候有如下做法: body, ul, ol, li, p, h1, h2, h3, h4, h5, h6, form, label, dl, dt, dd,fields ...

  5. C++ Primer第18章Vector的再实现及bug修正

    C++Primer第18.1.2节在介绍allocator类的时候,给了一个仿照标准库中vector的例子.感觉示例代码非常好,但是本人发现了一个bug,与大家共享. 按照作者的示例程序,编译程序时总 ...

  6. 解决Eclipse下第三方库无法导航源代码

    写在前面(的废话):Eclipse无法导航代码,存在的可能性非常多,这里我们只讨论在引用第三方库时无法导航的情况,是一个很简单的Case,但是搜索能力好像不太及格,没找到一针见血的方案,于是自己研究了 ...

  7. Linux03--文件打包与解压

    参考了<鸟哥的Linux私房菜> 1.压缩命令 gzip(压缩)与zcat(解压并读出来) gzip 可以说是应用度最广的压缩命令了!目前 gzip 可以解开 compress, zip ...

  8. 运用Detours库hook API(原理是改写函数的头5个字节)

    一.Detours库的来历及下载: Detours库类似于WTL的来历,是由Galen Hunt and Doug Brubacher自己开发出来,于99年7月发表在一篇名为<Detours: ...

  9. 拓扑排序(TopologicalSort)算法

    拓扑排序算法应用: 有些事情做都需要按照流程的去做,比如你准备约你小女友去影院看速度与激情7大片,首先你想的是我怎么到达影院,然后达到影院,你可以先买票,或者等小女友来了一起买票,然后一起进电影大厅. ...

  10. ubuntu 14.04 vnc use gnome(ubuntu14.04 gnome for vnc4server)

    New 'jenkinsmaster.cc:3 (root)' desktop is jenkinsmaster.cc:3 Starting applications specified in /ro ...