title:用线程池实现的http服务器

从main函数看起

  1. 解析ip地址(点分制, 端口号)
  2. 设置忽略SIGPIPE信号
  3. 初始化线程池,池中创建了8个线程,每个线程对应一个work函数
  4. 初始化http逻辑任务处理对象(65535个,为什么需要分配这么多????)
  5. 初始化socket

      socket函数原型 int socket(int af, int type, int protocol);

       af    AF_INET或者AF_INET6,分别表示IPv4地址或者IPv6地址,或者可以为PF_INET(与AF_INET区别是理论上建立socket时是指定协议,应该用PF_INET,设置地址时应该用AF_INET)

       type 为数据传输方式/套接字类型,常用的有 SOCK_STREAM(流格式套接字/面向连接的套接字) 和 SOCK_DGRAM(数据报套接字/无连接的套接字)

         protocol 表示传输协议,常用的有 IPPROTO_TCP 和 IPPTOTO_UDP,分别表示 TCP 传输协议和 UDP 传输协议。

         setsockopt函数原型 int setsockopt(int sockfd, int level, int optname, const void *optval, socklen_t optlen); manipulate options for the socket referred to by the file descriptor sockfd(手动设置socket指定文件描述符                         选项)

        sockfd  socket文件描述符

        level    指定网络协议protocol number,比如TCP协议对应的是SOL_SOCKET

        optname  SO_LINGER 在默认情况下,当调用close关闭socke的使用,close会立即返回,但是,如果send buffer中还有数据,系统会试着先把send buffer中的数据发送出去,然后close才返回.

        optval 根据optname传递参数

        oplen sizeof(optval)

      inet_pton man inet_pton

hton man hton

         bind man bind

      listen man listen

  6. epoll初始化

    创建epoll实例 

    epoll_create(int size)

      size之前用于表示要监视的文件描述符个数,现在只需要大于0即可,因为内核可以动态获取数据结构的大小

    控制epoll

    epoll_ctrl(int epfd, int op, int fd, struct epoll_event *event);

      epoll_ctl( epollfd, EPOLL_CTL_ADD, fd, &event ); // EPOLL_CTL_ADD把fd所指向的socket描述符添加到epollfd指定的epoll监听实例集中.
   7.  等待epoll实例关联的文件描述符上的事件
    epoll_wait(int epfd, struct epoll_event *events, int maxevents, int timeout)
      timeout -1表示调用将一直等待到有事件发生才能返回(阻塞 block indefinitely)

最新文章

  1. [deviceone开发]-do_Webview加载JQueryMobile的示例
  2. redis分片
  3. Spring4读书笔记(1)-模块
  4. 内存管理内幕mallco及free函数实现
  5. jquery中focus()函数实现当对象获得焦点后自动把光标移到内容最后
  6. Html标签之frameset&图片切换
  7. 关于CocoaPods update/CocoaPods install 慢、没反应、卡住的解决方案(Pods升级步骤)
  8. C# 多线程防止卡死
  9. string.Format格式化
  10. NOI 2001 食物链(eat)
  11. Tasklist and TaskKill
  12. windows异常调用顺序
  13. 根据IP地址获取IP的详细信息
  14. Jasper之table报表
  15. 在chrome上隐藏video的option按钮
  16. 【转】Mysql索引设计原则
  17. 【博客迁移】hyrepo.com
  18. linux复制文件到一个不存在的文件夹
  19. 用CSS将select/option文本居中
  20. 树莓派2上手 —— Raspbian的一些基本配置问题

热门文章

  1. Unity实现写入json文件
  2. 使用PInvoke互操作,让C#和C++愉快的交互优势互补
  3. Linux、Ubuntu、CentOS安装和配置zsh
  4. 14 . Python3之MysSQL
  5. 北京理工大学复试上机--2001B
  6. 用js数组实现最原始的图片轮播实现
  7. Java实现 蓝桥杯 算法提高 天天向上(DP)
  8. Java实现 LeetCode 673 最长递增子序列的个数(递推)
  9. Java实现 LeetCode 385 迷你语法分析器
  10. Java实现 蓝桥杯VIP 算法训练 数的统计