01 2017 档案
摘要:event_add、event_del两个函数分别是使event生效和失效的,下面就来看一下两个函数的实现。 event_add 这里以epoll作为后端来举例分析event_add函数的调用流程: event_del 这里以epoll作为后端来分析event_del的调用流程: 结论: 到这里ev
阅读全文
摘要:这篇文章源于我看libevent的源码时想到的问题,对于libevent的buffer机制,如果接受端一直不取数据的话,会怎样?如果丢包,不现实,因为会导致数据丢失,如果不丢包,就会导致占用内存一直扩大。 由此我想到对于tcp/udp如果一直发,接收端不调用recv取数据会怎样,是会导致send失败
阅读全文
摘要:recv是可以用在UDP套接字上的,前提是该套接字调用过bind或者connect,那它用在TCP和UDP套接字上时有什么区别呢? 下面做一个测试,分别使用UDP、TCP实现一对C/S、客户端发送12字节数据,服务器接受的时候用10字节大小的buffer去接受。 TCP tcpSvr: tcpCli
阅读全文
摘要:先看一下这三个函数的声明: 1、这个三个函数都是用来从一个socket接收消息的,不同之处在于recvfrom和recvmsg可以用在已经建立连接的socket,也可以用在没有建立连接的socket,关于建立连接的socket,简单来说就是有没有调用connect,调用了bind的socket也可以
阅读全文
摘要:evmap_io_active_函数用于将激活指定文件描述符上的事件 遍历evmap_io的成员events,在每一次遍历中实际调用ev_active_nolock_ 该函数在最后又调用函数event_callback_activate_nolock 该函数最后又调用event_queue_inse
阅读全文
摘要:epoll后端机制的实现代码在epoll.c文件中。 1 /* 2 * Copyright 2000-2007 Niels Provos <provos@citi.umich.edu> 3 * Copyright 2007-2012 Niels Provos, Nick Mathewson 4 *
阅读全文
摘要:在分析libevent源码并实现自己的网络库的时候想到这样一个问题:为什么注册事件的时候总是替换着注册EPOLLIN和EPOLLOUT呢? 于是我就在接收新连接注册新连接的监听事件时把EPOLLIN和EPOLLOUT都注册上了,结果就是,一直进EPOLLOUT,也就是说连接的套接字一直都可以可写的,
阅读全文
摘要:一、首先需要看一下这两个函数的作用: 根据manual的解释: dup:创建一份oldfd的拷贝,使用最小的文件描述符作为新的文件描述符。 dup2:创建一份oldfd的拷贝,使用指定的newfd作为新的文件描述符。 要看这两个函数是怎么实现的,首先得知道Linux对于文件描述符是怎么处理的,参考这
阅读全文
摘要:在Linux中每一个进程的数据是存储在一个task_struct结构(定义在sched.h中)中的。 该结构中有一个用于保存打开文件信息的成员:files,该成员类型是:struct files_struct*(定义在file.h)。 可以看到该结构中保存了所有与进程打开文件相关的信息,其中fd_a
阅读全文