TCP连接的建立与终止

先附上正常连接和正常关闭情况下TCP状态变迁图 两个应用程序同时彼此执行主动打开的情况是可能的,尽管发生的可能性极小。TCP特意设计了可以处理同时打开,对于同时打开它仅建立一条连接而不是两条连接。 两个应用程序同时都执行主动关闭也是可能的,TCP协议也允许这样的同时关闭(simultaneous close) TIME_WAIT 1. TIME_WAIT状态也称为2MSL等待状态...
阅读(101) 评论(0)

[置顶] 从epoll源码分析它的使用

首先来看看epoll_create的真身SYSCALL_DEFINE1(epoll_create, int, size) { if (size <= 0) return -EINVAL; //也就是说参数size根本用不上 return sys_epoll_create1(0); }再来看看epoll_create1的真身SYSCALL_DEFINE1(epoll_c...
阅读(423) 评论(0)

[置顶] 不定参数函数牵扯出来的栈的生长方向和大端小端模式

主题:CPU的架构决定了大端小端模式和栈的生长方向。 前天参加深信服的专场招聘,问到不定参数函数的实现,当时只记得参数入参是从右到左,但是在栈中的存放地址大小当时就想不起来了,现在专门好好整理一下。 首先参数从右到左压栈的方式,这是C语言决定的,比如说Pascal就是从左到右压栈,所以Pascal不支持不定参数函数。比如:printf("%s%d%d\n", s, a, b);格式字符串是确定存...
阅读(198) 评论(0)

[置顶] libevent多线程使用bufferevent的那些事

void do_accept(struct evconnlistener *listener, evutil_socket_t fd, struct sockaddr *sa, int socklen, void *ctx) { //不使用Nagle算法,选择立即发送数据而不是等待产生更多的数据然后再一次发送 int optval = 1; setsockopt(fd, SO...
阅读(1149) 评论(2)

[置顶] recv和send的完整写法

struct evbuffer* input = evbuffer_new();//数据缓冲 void read_data() { char buffer[1024] = { '\0' }; int ret = recv(fd, buffer, 1024, 0); //从接收缓冲取数据成功 if (ret > 0) { evbuffer_add...
阅读(391) 评论(0)

socket套接字选项和模式

设置非阻塞windows的做法: u_long nonblocking = 1; ioctlsocket(fd, FIONBIO, &nonblocking); linux的做法 int flags; flags = fcntl(fd, F_GETFL, NULL); fcntl(fd, F_SETFL, flags | O_NONBLOCK);设置FD_CLOEXECint flags; flag...
阅读(567) 评论(0)

libevent使用event事件触发服务端实例

struct event_base* m_base = event_base_new(); if (NULL == m_base) { return 1; }首先是创建base,后面的event都是基于base,关联到base才能进入循环。struct sockaddr_in server_addr; server_addr.sin_family = AF_INET; server_addr...
阅读(111) 评论(0)

libevent学习网站

http://www.monkey.org/~provos/libevent/doxygen-2.0.1/files.html...
阅读(58) 评论(0)

Windows网络编程Select模型的封装和queue作为数据缓存的使用

首先是对Select网络模型的封装,由于会用到数据缓存,所以接收到的数据需要对应一个socket套接字,这样回复数据的时候才知道对象。 #pragma once //存储从某个套接字接受到的数据,通过套接字可以发送处理后的数据 struct NetDataBuffer { char strBuffer[BUFFER_SIZE]; SOCKET sSocket; }; class CI...
阅读(295) 评论(0)

[置顶] Linux下高并发socket,单机提供五十万连接

引用《Linux网络编程》 一个完整的Socket描述,五元组,{协议,本地地址,本地端口,远程地址,远程端口} 当我们自己写客户端测试程序来测试我们的服务端程序性能的时候,经常会遇到连接量上不去的问题,大多都是停留在2万左右。如果我们的测试机器有限,要想达到百万连接量的测试,那我们哪里去找50台测试机器了?实际的测试也不可能给50台测试机器。那么根据这个五元组,我们可以做一下文章。首先协议已...
阅读(1045) 评论(0)
    个人资料
    • 访问:16015次
    • 积分:533
    • 等级:
    • 排名:千里之外
    • 原创:37篇
    • 转载:0篇
    • 译文:0篇
    • 评论:21条
    联系方式

    公司:深信服科技股份有限公司


    所在地:中国-广东省-深圳市


    QQ交流群:165650716


    文章分类
    最新评论