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

  • 相关阅读:
    海伦公式
    简单的博弈
    Hello World 代码
    Hello world
    99999999海岛帝国后传:算法大会
    判断质数
    idea plantUML配置
    测试用例评审
    如何编写有效测试用例
    测试用例设计——场景分析法
  • 原文地址:https://www.cnblogs.com/jokoz/p/4719162.html
Copyright © 2020-2023  润新知