//接收一个新的连接connection*connection_accept(server*srv, server_socket*srv_socket) {/*accept everything*//*search an empty place*/intcnt;

sock_addr cnt_addr;

socklen_t cnt_len;/*accept it and register the fd*//**

* check if we can still open a new connections

*

* see #1216*///如果正在使用的连接数大于最大连接数 就返回NULLif(srv->conns->used>=srv->max_conns) {returnNULL;

}

cnt_len=sizeof(cnt_addr);if(-1==(cnt=accept(srv_socket->fd, (structsockaddr*)&cnt_addr,&cnt_len))) {switch(errno) {caseEAGAIN:#ifEWOULDBLOCK != EAGAINcaseEWOULDBLOCK:#endifcaseEINTR:/*we were stopped _before_ we had a connection*/caseECONNABORTED:/*this is a FreeBSD thingy*//*we were stopped _after_ we had a connection*/break;caseEMFILE:/*out of fds*/break;default:

log_error_write(srv, __FILE__, __LINE__,"ssd","accept failed:", strerror(errno), errno);

}returnNULL;

}else{

connection*con;//当前使用的fd数量+1srv->cur_fds++;/*ok, we have the connection, register it*///打开的connection+1(这个成员貌似没有用)srv->con_opened++;//获取一个新的connectioncon=connections_get_new_connection(srv);//保存接收到的fdcon->fd=cnt;//索引为-1con->fde_ndx=-1;#if0gettimeofday(&(con->start_tv), NULL);#endif//注册函数指针和connection指针fdevent_register(srv->ev, con->fd, connection_handle_fdevent, con);//状态为可以接收请求connection_set_state(srv, con, CON_STATE_REQUEST_START);//保存接收连接的时间con->connection_start=srv->cur_ts;//保存目标地址con->dst_addr=cnt_addr;

buffer_copy_string(con->dst_addr_buf, inet_ntop_cache_get_ip(srv,&(con->dst_addr)));//保存server_socket指针con->srv_socket=srv_socket;//设置一下接收来的FD, 设置为非阻塞if(-1==(fdevent_fcntl_set(srv->ev, con->fd))) {

log_error_write(srv, __FILE__, __LINE__,"ss","fcntl failed:", strerror(errno));returnNULL;

}

#ifdef USE_OPENSSL/*connect FD to SSL*/if(srv_socket->is_ssl) {if(NULL==(con->ssl=SSL_new(srv_socket->ssl_ctx))) {

log_error_write(srv, __FILE__, __LINE__,"ss","SSL:",

ERR_error_string(ERR_get_error(), NULL));returnNULL;

}

SSL_set_accept_state(con->ssl);

con->conf.is_ssl=1;if(1!=(SSL_set_fd(con->ssl, cnt))) {

log_error_write(srv, __FILE__, __LINE__,"ss","SSL:",

ERR_error_string(ERR_get_error(), NULL));returnNULL;

}

}#endifreturncon;

}

}

监听web服务器状态,处理监听fd的流程 - web服务器lighttpd1.4.18代码详细分析_Linux编程_Linux公社-Linux系统门户网站...相关推荐

  1. 外网主机访问虚拟机下的Web服务器_服务器应用_Linux公社-Linux系统门户网站

    外网主机访问虚拟机下的Web服务器_服务器应用_Linux公社-Linux系统门户网站 之前在CentOS虚拟机上安装了LAMP,搭建起了自己的web服务器,具体流程见: http://www.lin ...

  2. 服务器ubuntu系统版本选型原则,系统集成 - 选择Ubuntu服务器版操作系统的六大理由_服务器应用_Linux公社-Linux系统门户网站...

    二. 系统集成 (1)集成现有的系统 Ubuntu服务器版本用常用的身份认证方式和服务入口工具简单地集成企业现有的客户/服务器结构.我们都知道系统集成技术的重要性,这也是Ubuntu团队花费大量时间研 ...

  3. mysql双机互备linux成功的_配置MySQL双机热备 - Linux服务器MySQL双机热备份试验_数据库技术_Linux公社-Linux系统门户网站...

    二.配置MySQL双机热备 传统模式都是采用MySQL双机互备,至于双机热备我搜索了大量的精华帖子都没有发现安装配置文档.故我的一个想法产生了:当建立新的数据库时,默认会建立到/usr/local/m ...

  4. linux hive的作用,Hive的基本应用 - Hadoop和Hive的实践应用_服务器应用_Linux公社-Linux系统门户网站...

    前面我已经搭好了Hadoop和hive环境,并且在hive中创建了表page,将数据load了进去.现在我想从这个表中统计每个url的流量,并放到其他关系中数据库中或者展现在页面上,怎么办? 去官网是 ...

  5. ftp连接oracle服务器,使用SSL加密连接FTP - 架建SSL安全加密的FTP服务器(图)_服务器应用_Linux公社-Linux系统门户网站...

    四.使用SSL加密连接FTP 启用Serv-U服务器的SSL功能后,就可以利用此功能安全传输数据了,但FTP客户端程序必须支持SSL功能才行. 如果我们直接使用IE浏览器进行登录则会出现图4显示的错误 ...

  6. linux判断网卡是否挂载,检查网卡是否加载 - Linux服务器网卡驱动安装及故障排除_服务器应用_Linux公社-Linux系统门户网站...

    2.检查网卡是否加载: 驱动硬件是操作系统最基本的功能,操作系统通过各种驱动程序来驾驭硬件设备,和Windows系统不同Linux内核目前采用可加载的模块化设计(LKMs Loadable Kerne ...

  7. 利用Linux系统搭建网站(含相关,域名申请,服务器选择,Java JDK安装,数据库配置,域名绑定服务器,服务器绑定域名),最终实现通过域名访问你的网站项目,创作不易,如果对你有帮助的还请点赞支持

    搭建之前的理论知识 先来简略说一下什么是域名,什么是服务器 域名(英语:Domain Name),又称网域,是由一串用点分隔的名字组成的Internet上某一台计算机或计算机组的名称,用于在数据传输时 ...

  8. 魔兽世界服务器状态 排队人数,魔兽世界怀旧服开服 服务器拥挤 排队人数上万...

    原标题:<魔兽世界>怀旧服今天开服,服务器拥挤,排队人数达上万 8月27日,今天老玩家们期待已久的<魔兽世界>怀旧服终于正式开服! 截止早晨7点整,怀旧服排队情况还较为乐观,其 ...

  9. macsv服务器状态,和利时macs问题(启动服务器无法读出控制器的点名)

    在调试系统的时候,第一次将程序下到主控里,然后下装到服务器,操作站,然后启动服务器(在启动服务器过程中报错即多有点都有错误),操作站,在服务器安装文件夹macs下的一个日志里:: 10号站 : 点.F ...

最新文章

  1. js回调流程控制, 更高级, 更优雅
  2. winhex使用经验
  3. golang+数据库定时任务
  4. SQL Server之字符串函数
  5. tensorflow中的Supervisor
  6. 【C++深度剖析教程16】智能指针的分析
  7. VS2010 测试功能之旅:编码的UI测试(4)-通过编写测试代码的方式“.NET研究”建立UI测试(下)...
  8. DelphiXE下的字符串变化
  9. 《像计算机科学家一样思考Python(第2版)》——2.7 注释
  10. shell与shell脚本
  11. java 19 - 5 Throwable的几个常见方法
  12. 丰县哪里有学计算机,江苏丰县中等专业学校2021年有哪些专业
  13. Multisim14 - 运行10版本文件时数码管一直显示为0的问题
  14. appfuse mysql_Appfuse中文教程
  15. Layabox2初学(一)javascript
  16. css三实现ui,纯CSS实现常见的UI效果
  17. 更换内存条导致windows启动失败,报错信息:windows无法验证此文件的数字签名,2018.11;
  18. 解决锐捷客户端出现密码不匹配,请输入正确密码问题
  19. 二进制bit0是什么意思_什么是ip地址
  20. springboot文件上传之MultipartFile(图片)转base64

热门文章

  1. oracle 8i 中文转拼音
  2. Spring Boot 中三种跨域场景总结
  3. 高德地图API以案例学习
  4. javaScript快速入门(笔记)
  5. AttributeError: module 'easygui' has no attribute 'msgbox'错误
  6. 8255A方式0应用
  7. 电脑的任务栏卡,但是桌面可以正常使用
  8. 第1.7章 elasticsearch线上问题集1
  9. 脑科学是个啥,跟人工智能有什么渊源「AI核心算法」
  10. 芯片测试术语 ,片内测试(BIST),ATE测试