
网络
wuyue五月
这个作者很懒,什么都没留下…
展开
-
Epoll详解及源码分析
转载地址:http://blog.youkuaiyun.com/chen19870707/article/details/425258871.什么是epollepoll是当前在Linux下开发大规模并发网络程序的热门人选,epoll 在Linux2.6内核中正式引入,和select相似,都是I/O多路复用(IO multiplexing)技术,按照man手册的说法:是为处理大批量句柄而作了转载 2016-06-30 09:18:29 · 2045 阅读 · 0 评论 -
linux网络编程之-----多播(组播)编程
转载地址:http://blog.youkuaiyun.com/jmq_0000/article/details/7095727最近用到组播就看看,算是比较好的,但是有些属性没有在例子中很少的阐述,稍有欠缺。后期有时间我这里会相应的完整更新下。什么是多播 单播用于两个主机之间的端对端通信,广播用于一个主机对整个局域网上所有主机上的数据通信。单播和广播是两个极端,转载 2016-07-18 16:51:53 · 593 阅读 · 0 评论 -
socket so_reuseport提高服务端性能
以前就在国外的论坛接触过 SO_REUSEPORT,这两天朋友群又在传播nginx 1.9 reuseport多进程监听参数。 那咱们简单说下 SO_REUSEPORT的应用场景, 为什么会用他? 然而在讲解SO_REUSEPORT之前,需要先说下我们常用的网络模型。文章写得不太严谨, 请砖家拍砖,另外标注下原文地址, http://xiaorui.cc/?p=2413当前L转载 2016-08-25 19:27:49 · 3469 阅读 · 0 评论 -
linux 遭遇SIGPIPE信号,导致进程退出的问题
当服务器close一个连接时,若client端接着发数据。根据TCP协议的规定,会收到一个RST响应,client再往这个服务器发送数据时,系统会发出一个SIGPIPE信号给进程,告诉进程这个连接已经断开了,不要再写了。我写了一个服务器程序,在Linux下测试,然后用C++写了客户端用千万级别数量的短链接进行压力测试. 但是服务器总是莫名退出,没有core文件.最后问题确转载 2016-08-25 20:36:42 · 2130 阅读 · 0 评论 -
epoll开发建议说明
2.。。1、listen fd,有新连接请求,对端发送普通数据 触发EPOLLIN。2、带外数据,只触发EPOLLPRI。3、对端正常关闭(程序里close(),shell下kill或ctr+c),触发EPOLLIN和EPOLLRDHUP,但是不触发EPOLLERR 和EPOLLHUP。再man epoll_ctl看下后两个事件的说明,这两个应该是本端(server端)出错才触转载 2017-12-20 15:26:04 · 685 阅读 · 0 评论 -
setsockopt()用法(参数详细说明)
1.closesocket(一般不会立即关闭而经历TIME_WAIT的过程)后想继续重用该socket:BOOL bReuseaddr=TRUE;setsockopt(s,SOL_SOCKET ,SO_REUSEADDR,(const char*)&bReuseaddr,sizeof(BOOL));2. 如果要已经处于连接状态的soket在调用closesocket后强制关闭,转载 2017-12-20 15:28:49 · 2123 阅读 · 0 评论 -
TCP/IP网络编程 学习笔记_15 --多播与广播
转自:http://blog.youkuaiyun.com/u010223072/article/details/48269213前言:想想这么一种情况,网络电台可能需要同时向成千上万的用户传输相同的数据,如果用我们以前讲过的传输形式,每个用户都传输一次,这样肯定是不合理的。因此,就引入了多播技术来解决这个问题,它可以同时向大量用户发送相同数据。其基本原理是这样的:有个多播组,只要加入这个转载 2017-12-15 16:02:46 · 375 阅读 · 0 评论 -
TCP协议中的三次握手和四次挥手(图解)
建立TCP需要三次握手才能建立,而断开连接则需要四次握手。整个过程如下图所示:先来看看如何建立连接的。【更新于2017.01.04 】该部分内容配图有误,请大家见谅,正确的配图如下,错误配图也不删了,大家可以比较下,对比理解效果更好。这么久才来更新,抱歉!!错误配图如下:首先Client端发送连接请求报文,Server转载 2017-12-18 14:18:02 · 394 阅读 · 0 评论 -
大话keepalive
大话keepalive我们说到keepalive的时候,需要先明确一点,这个keepalive说的是tcp的还是http的。tcp的keepalive是侧重在保持客户端和服务端的连接,一方会不定期发送心跳包给另一方,当一方端掉的时候,没有断掉的定时发送几次心跳包,如果间隔发送几次,对方都返回的是RST,而不是ACK,那么就释放当前链接。设想一下,如果tcp层没有keepalive的机制,一转载 2017-12-18 14:19:41 · 528 阅读 · 0 评论 -
字节对齐
我们知道的当一个结构体,如果我们想知道他占多少内存空间的话我们可以利用sizeof()来查看,但是有时候sizeof()得出的结构竟然和我们想象的不一样,这和编译器有很大的关系。编译器有自己的字节对齐机制,他为了某些原因,在内存上进行了一些调整。和填充,导致得到了与我们想法不一样的结果。虽然vc字节对齐网上有很多资料,但是呢,下面我就说说自己的理解,自己对这套规则的记忆方法。采用字节对转载 2016-05-14 17:32:01 · 337 阅读 · 0 评论 -
关于linux多线程同时对一个fd做select
多线程(多进程也是差不多的情况),select同一个fd,发现在某些情况下面,的确会有多个线程(进程)被唤醒,然后只有一个线程能够accept(stream类型的fd)或者recv(如果是diagram的fd),其它的则会在accept或recv处阻塞,当然如果把fd设成非阻塞的,则会返回一个失败。所以多线程同时select一个fd时,还是把fd设成非阻塞的,省得麻烦。因为循环处理时,往往也顺转载 2016-02-25 09:27:36 · 4960 阅读 · 0 评论 -
Unix Socket编程--I/O复用之select模型
一。之前写过一篇关于并发服务器的处理机制,其内容是这样的:考虑到有多个客户连接的情况下,服务器在收到每一个新的客户的连接请求时,都会创建一个新的连接套接字,而原来的监听套接字将保留以继续监听后续的连接请求;如果服务器不能立刻接受后来的连接,他们将会被添加到队列中等待被处理。当服务器调用fork()来为自己创建拷贝时,打开的连接套接字将被新的子进程所继承。新的子进程将和该客户进行连接转载 2014-04-03 20:43:02 · 655 阅读 · 0 评论 -
I/O多路复用select,Poll epoll 的比较
select,poll,epoll简介selectselect本质上是通过设置或者检查存放fd标志位的数据结构来进行下一步处理。这样所带来的缺点是:1 单个进程可监视的fd数量被限制2 需要维护一个用来存放大量fd的数据结构,这样会使得用户空间和内核空间在传递该结构时复制开销大3 对socket进行扫描时是线性扫描转载 2014-04-03 22:20:52 · 1073 阅读 · 0 评论 -
linux异步IO的两种方式
知道异步IO已经很久了,但是直到最近,才真正用它来解决一下实际问题(在一个CPU密集型的应用中,有一些需要处理的数据可能放在磁盘上。预先知道这些数据的位置,所以预先发起异步IO读请求。等到真正需要用到这些数据的时候,再等待异步IO完成。使用了异步IO,在发起IO请求到实际使用数据这段时间内,程序还可以继续做其他事情)。假此机会,也顺便研究了一下linux下的异步IO的实现。linux下转载 2014-04-03 21:48:30 · 12545 阅读 · 2 评论 -
I/O子系统:select,poll,epoll,kqueue, iocp(Windows)及各种I/O复用机制 模式Reactor Proactor
常见的I/O模型及其区别首先,介绍几种常见的I/O模型及其区别,如下:《Unix网络编程》blocking I/Ononblocking I/OI/O multiplexing (select and poll)signal driven I/O (SIGIO)asynchronous I/O (the POSIX aio_functions转载 2014-04-03 20:34:27 · 2335 阅读 · 0 评论 -
单播、广播和多播IP地址
除地址类别外,还可根据传输的消息特征将IP地址分为单播、广播或多播。主机使用IP地址进行一对一(单播)、一对多(多播)或一对所有(广播)的通信。1.单播单播地址是IP网络中最常见的。包含单播目标地址的分组发送给特定主机,一个这样的例子是,IP地址为192.168.1.5(源地址)的主机向IP地址为192.168.1.200(目标地址)的服务器请求网页,如图5.8所示。转载 2014-10-31 10:26:18 · 2285 阅读 · 0 评论 -
UNIX网络编程之环境配置
开始学习《Unix网络编程》,输入第一个程序后,遇到各种错误,先将解决方案记录如下。遇到的第一个错误是:没有找到头文件“unp.h”,该头文件是作者自己写的,并不包含在/usr/include中,这时需要到网上下载unpv13e.tar.gz到某一目录。具体操作:mkdir /home/yourname/download %创建存放压缩文件的目录tar -xzvf转载 2014-11-17 23:31:29 · 511 阅读 · 0 评论 -
linux内核网络协议栈学习笔记:关于GRO/GSO/LRO/TSO等patch的分析和测试
TSO,全称是TCP Segmentation Offload,我们知道通常以太网的MTU是1500,除去TCP/IP的包头,TCP的MSS (Max Segment Size)大小是1460,通常情况下协议栈会对超过1460的TCP payload进行segmentation,保证生成的IP包不超过MTU的大小,但是对于支持TSO/GSO的网卡而言,就没这个必要了,我们可以把最多64K大小的TC转载 2014-10-31 15:32:39 · 1094 阅读 · 0 评论 -
socket shutdown和close的区别
socket关闭连接的方法有两种分别是shutdown和close。1)shutdown的定义:#includeint shutdown(int sockfd,int how);how的方式有三种分别是:SHUT_RD(0):关闭sockfd上的读功能,此选项将不允许sockfd进行读操作。SHUT_WR(1):关闭sockfd的写功能,此选项将不允许sockfd进行写操作。转载 2015-01-18 15:01:46 · 2963 阅读 · 0 评论 -
linux socket网络编程:fcntl select(多个客户端连接服务器端情形)
一、引言 在实际情况中,人们往往遇到多个客户端连接服务器端的情况。由于之前介绍的函数如connect,recv,send等都是阻塞性函数,若资源没有充分准备好,则调用该函数的进程将进入睡眠状态,这样就无法处理I/O多路复用的情况了。 本文给出两种I/O多路复用的方法:fcntl(),select()。可以看到,由于Linux中把socket当作一种特殊的文件描述符,这给用户的处转载 2015-03-02 14:06:30 · 657 阅读 · 0 评论 -
Linux的SOCKET编程详解
Linux的SOCKET编程详解1. 网络中进程之间如何通信进 程通信的概念最初来源于单机系统。由于每个进程都在自己的地址范围内运行,为保证两个相互通信的进程之间既互不干扰又协调一致工作,操作系统为进程通信提供了相应设施,如UNIX BSD有:管道(pipe)、命名管道(named pipe)软中断信号(signal)UNIX转载 2015-03-04 11:02:17 · 455 阅读 · 0 评论 -
进程间数据通信方式和特点
由于不同的进程运行在各自不同的内存空间中.一方对于变量的修改另一方是无法感知的.因此.进程之间的信息传递不可能通过变量或其它数据结构直接进行,只能通过进程间通信来完成。根据进程通信时信息量大小的不同,可以将进程通信划分为两大类型:控制信息的通信和大批数据信息的通信.前者称为低级通信,后者称为高级通信。低级通信主要用于进程之间的同步、互斥、终止、挂起等等控制信息的传递。高级通转载 2014-04-03 18:09:42 · 1002 阅读 · 0 评论