epoll 的accept , read, write】的更多相关文章

在一个非阻塞的socket上调用read/write函数,返回EAGAIN或者EWOULDBLOCK(注:EAGAIN就是EWOULDBLOCK). 从字面上看,意思是: EAGAIN: 再试一次 EWOULDBLOCK:如果这是一个阻塞socket, 操作将被block perror输出:Resource temporarily unavailable 总结: 这个错误表示资源暂时不够,可能read时, 读缓冲区没有数据, 或者write时,写缓冲区满了. 遇到这种情况,如果是阻塞socket…
http://www.ccvita.com/515.html 在一个非阻塞(fcntl)的socket上调用read/write函数, 返回EAGAIN或者EWOULDBLOCK(注: EAGAIN就是EWOULDBLOCK) 这个错误表示资源暂时不够, 可能read时, 读缓冲区没有数据, 或者, write时,写缓冲区满了.  (此处读写缓冲区指的是socket的缓冲区,而不是read或write调用形参中的buffer) 遇到这种情况, 如果是阻塞socket, read/write就要阻…
书到用时方恨少,一切尽在不言中 #include <iostream> #include <sys/socket.h> #include <sys/epoll.h> #include <netinet/in.h> #include <arpa/inet.h> #include <fcntl.h> #include <unistd.h> #include <stdio.h> #include <errno.…
epoll - I/O event notification facility 在linux的网络编程中,很长的时间都在使用select来做事件触发.在linux新的内核中,有了一种替换它的机制,就是epoll.     相比于select,epoll最大的好处在于它不会随着监听fd数目的增长而降低效率.因为在内核中的select实现中,它是采用轮询来处理的,轮询的fd数目越多,自然耗时越多. 并且,在  linux/posix_types.h头文件有这样的声明: #define __FD_SE…
一.epoll_create & epoll_create1 SYSCALL_DEFINE1(epoll_create, int, size) sys_epoll_create->sys_epoll_create1 SYSCALL_DEFINE1(epoll_create1, int, flags) sys_epoll_create1(入参检测等)->ep_alloc(分配eventpoll,并初始化锁.等待队列等结构)->[sys_epoll_create1]get_unuse…
从Linux源码看Socket(TCP)的accept 前言 笔者一直觉得如果能知道从应用到框架再到操作系统的每一处代码,是一件Exciting的事情. 今天笔者就从Linux源码的角度看下Server端的Socket在进行Accept的时候到底做了哪些事情(基于Linux 3.10内核). 一个最简单的Server端例子 众所周知,一个Server端Socket的建立,需要socket.bind.listen.accept四个步骤. 今天,笔者就聚焦于accept. 代码如下: void st…
一.进程和线程的概念 1.进程(最小的资源单位): 进程:就是一个程序在一个数据集上的一次动态执行过程.进程一般由程序.数据集.进程控制块三部分组成. 程序:我们编写的程序用来描述进程要完成哪些功能以及如何完成: 数据集;则是程序在执行过程中所需要使用的资源: 进程控制块:用来记录进程的外部特征,描述进程的执行变化过程,系统可以利用它来控制和管理进程,它是系统感知进程存在的唯一标志. 进程比线程更早出现,计算机早期处理代码时,使用的是串行的方法,假设计算机在运行A,B,C三个软件,需要A运行完了…
if (c->read->ready) { ngx_http_upstream_process_header(r, u); //读事件触发 准备处理http头部信息 return; } 向上游服务器发送数据完毕后就会检测是否收到上游服务器的响应: static void ngx_http_upstream_process_header(ngx_http_request_t *r, ngx_http_upstream_t *u) {//读取FCGI头部数据,或者proxy头部数据.ngx_htt…
今天打开 OneNote,发现里面躺着一篇很久以前写的笔记,现在将它贴出来. 1. 什么叫惊群现象 首先,我们看看维基百科对惊群的定义: The thundering herd problem occurs when a large number of processes waiting for an event are awoken when that event occurs, but only one process is able to proceed at a time. After…
tcp 三次握手成功后,listen fd  可读,在process_event_timer 中调用rev->handler(rev)处理: 其回调函数为: ngx_event_accept /* 如何建立新连接 上文提刭过,处理新连接事件的回调函数是ngx_event_accept,其原型如下.void ngx_event_accept (ngx_event_t★ev) 下面简单介绍一下它的流程,如图9-6所示. 下面对流程中的7个步骤进行说明. 1)首先调用accept方法试图建立新连接,如…