志存高远

专注于C/C++

Linux网络编程--服务端判断客户端断开的经验方法

法一: 当recv()返回值小于等于0时,socket连接断开。但是还需要判断 errno是否等于 EINTR,如果errno == EINTR 则说明recv函数是由于程序接收到信号后返回的,socket连接还是正常的,不应close掉socket连接。   法二:   struct tcp_i...

2016-03-07 15:41:36

阅读数:4976

评论数:4

Linux网络编程--使用epoll,共享内存技术实现高性能的聊天室程序

本篇博文主要介绍使用epoll和多进程的共享内存技术实现高性能的聊天室的服务器程序。#include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <asser...

2016-03-28 10:25:49

阅读数:1695

评论数:0

Linux网络编程--使用epoll模型同时处理tcp和udp服务

在实际工作中,服务器需要同时监听和处理tcp和udp的套接字,同时监听N多的端口。根据bind系统调用来讲,一个socket只能监听一个端口,因此要创建多个socket并绑定到各个端口上。当然同一个端口可以同时绑定tcp和udp的socket,但是要创建两个socket,一个是tcp的一个是udp...

2016-03-22 14:43:47

阅读数:2658

评论数:2

Linux网络编程--epoll模型ET触发模式之epolloneshot事件

epoll模型的ET模式一般来说只触发一次,然而在并发程序中有特殊情况的存在,譬如当epoll_wait已经检测到socket描述符fd1,并通知应用程序处理fd1的数据,那么处理过程中该fd1又有新的数据可读,会唤醒其他线程对fd1进行操作,那么就出现了两个工作线程同时处理fd1的情况,这当然不...

2016-03-21 15:24:22

阅读数:1234

评论数:0

Linux网络编程--epoll模型之LT触发模式和ET触发模式

epoll对文件描述符有两种操作模式--LT(level trigger电平模式)和ET(edge trigger边缘模式) 简单来讲,LT是epoll的默认操作模式,当epoll_wait函数检测到有事件发生并将通知应用程序,而应用程序不一定必须立即进行处理,这样epoll_wait函数再次检...

2016-03-21 14:38:46

阅读数:2081

评论数:0

Linux网络编程--sendfile零拷贝高效率发送文件

本博文介绍使用sendfile函数进行零拷贝发送文件,实现高效数据传输,并对其进行验证。 那么什么是sendfile呢? linux系统使用man sendfile,查看sendfile原型如下: #include        ssize_t sendfile(int out_fd, int ...

2016-03-11 15:24:11

阅读数:9351

评论数:1

Linux网络编程--定时器之时间堆

相比较时间轮,时间堆的效率更高,主要利用最小堆的思想实现。 具体实现过程如下: #ifndef intIME_HEAP #define intIME_HEAP #include #include #include using std::exception; #define BUFFE...

2016-03-10 15:40:58

阅读数:825

评论数:0

Linux网络编程--定时器之时间轮

由于基于升序定时器链表的添加定时器效率偏低,所以本博文介绍一种高效的定时器---时间轮; 时间轮:包含时间间隔si,时间轮槽数N,运行一周所用的时间是si*N。每一个槽就是一个无序的定时器链表,并且拥有统一的特征,定时时间相差N*si整数倍。 时间轮的优势在于采用哈希表的思想,将定时器散列在不...

2016-03-10 15:29:57

阅读数:988

评论数:0

Linux网络编程--定时器的学习和使用

linux网络编程需要处理的重要事件之一--定时事件,对于服务器而言,管理着众多的客户端连接,高效稳定的管理这些客户端,定时事件是必不可少的,也对服务器的性能有着至关重要的作用。本博文先介绍简单的定时事件,以便于下一篇介绍高性能定时器做铺垫。 1.使用setsockopt设置socket选项SO_...

2016-03-10 14:25:52

阅读数:1441

评论数:0

libevent---主要函数

event_int(初始化libevent实例) struct event_base * event_init(void) 初始化事件处理框架实例,内部调用event_base_new。 event_base_new的主要逻辑: 代码  1 struct event_base ...

2016-03-08 15:10:16

阅读数:1113

评论数:0

libevent---核心event和event_base

结构体event和event_base是libevent的两个核心数据结构,前者代表一个事件对象,后者代表整个事件处理框架。 1.event事件对象 //event.h struct event { TAILQ_ENTRY (event) ev_next; //已注册事件...

2016-03-08 14:58:34

阅读数:542

评论数:0

libevent---源代码结构

Libevent 的源代码虽然都在一层文件夹下面,但是其代码分类还是相当清晰的,主要可分为头文件、内部使用的头文件、辅助功能函数、日志、libevent 框架、对系统 I/O 多路复用机制的封装、信号管理、定时事件管理、缓冲区管理、基本数据结构和基于 libevent的两个实用库等几个部分,有些部...

2016-03-08 14:49:30

阅读数:567

评论数:0

libevent入门---定时器程序

1、入门 1.1、概述 Libevent是一个用于开发可扩展性网络服务器的基于事件驱动(event-driven)模型的网络库。Libevent有几个显著的亮点:  (1)事件驱动(event-driven),高性能; (2)轻量级,专注于网络,不如 ACE 那么臃肿庞大;  (3)...

2016-03-08 14:35:47

阅读数:1940

评论数:0

stat,lstat,fstat三者的区别

int stat(const char *path, struct stat *buf); int lstat(const char *path, struct stat *buf); int fstat(int filedes, struct stat *buf); 聪明人一眼就能看出...

2016-03-08 14:01:56

阅读数:1676

评论数:0

libevent---socket异步编程

libevent的使用 --  socket异步编程 这篇文章介绍下libevent在socket异步编程中的应用。在一些对性能要求较高的网络应用程序中,为了防止程序阻塞在socket I/O操作上造成程序性能的下降,需要使用异步编程,即程序准备好读写的函数(或接口)并向系统注册,然后在需要...

2016-03-04 15:34:18

阅读数:529

评论数:0

核心系统账务基本知识

一、  核心账务 1、 借贷记账法:有借必有贷,借贷必相等。  角度:发卡机构 2、 资产=负债+所有者权益 运营一段时间后 资产=负债+所有者权益+收入-费用 借贷平衡计算规则: 费用+资产=负债+所有者权益+收入 3、 资产(借记卡,增加为借记),负债(信用卡...

2016-03-03 16:48:59

阅读数:1303

评论数:0

linux shell脚本读取用户输入的参数

$# 是传给脚本的参数个数 $0 是脚本本身的名字 $1是传递给该shell脚本的第一个参数 $2是传递给该shell脚本的第二个参数 $@ 是传给脚本的所有参数的列表 例如: #!/bin/sh echo "arg_num: $#" echo &quo...

2016-03-02 13:37:00

阅读数:3882

评论数:0

提示
确定要删除当前文章?
取消 删除
关闭
关闭