Category: 网络基础
All the articles in the category "网络基础".
-
I/O多路复用之 epoll 系统调用
I/O多路复用除了之前我们提到的和外,epoll 也可以检查多个文件描述符的就绪状态,以达到I/O多路复用的目的。 epoll 系统调用是 Linux 系统专有的,在 Linux 内核 2.6 版本新增,epoll 的主要优点有: 当检查大量的文件描述符时,epoll 的性能比和高很多 epo...
-
epoll 水平触发与边缘触发
epoll也是实现I/O多路复用的一种方法,为了深入了解epoll的原理,我们先来看下epoll水平触发(level trigger,LT,LT为epoll的默认工作模式)与边缘触发(edge trigger,ET)两种工作模式。 使用脉冲信号来解释LT和ET可能更加贴切。Level是指信号只...
-
I/O多路复用之POLL系统调用
函数类似于函数,也可以实现I/O多路复用。函数的声明如下: 第一个参数是指向一个结构数组第一个元素的指针。每个数组元素都是一个结构,用于指定测试某个给定描述符的条件。 要测试的条件由成员指定,函数在相应的成员中返回该描述符的状态。和都由某个特定条件的一位或多位构成。下面表格列出了用于指定标志以...
-
I/O多路复用之select系统调用
I/O多路复用模型允许我们同时等待多个套接字描述符是否就绪。Linux系统为实现I/O多路复用提供的最常见的一个函数是函数,该函数允许进程指示内核等待多个事件中的任何一个发生,并只有在一个或多个事件发生或经历一段指定的时间后才唤醒它。 作为一个例子,我们可以调用,告知内核仅在下列情况发生时才返...
-
多线程并发服务器
在多进程并发服务器的应用程序中,父进程一个连接,一个子进程,该子进程负责处理与该连接对端的客户之间的通信。 尽管多进程的编程模型中,各进程拥有独立的地址空间,减少了出错的概率,然而,调用却存在一些问题: 是昂贵的,要把父进程的内存映像复制到子进程,并在子进程中复制所有描述符,这个操作是较重量级...
-
多进程并发服务器
我们来考虑有多个客户同时连接一个服务器的情况。在前面的TCP套接字编程的例子中,我们已经看到,服务器程序在接受来自客户端的一个新连接时,会创建出一个新的套接字(已连接套接字),而原先的监听套接字则继续监听后面的连接请求。如果服务器不能立刻接受后来的连接,它们将被放到队列中以等待处理。 原先的套...
-
监听套接字与已连接套接字
监听套接字(listening socket)和已连接套接字(connected socket)之间的区别常会使很多人感到迷惑。本文简要描述一下这两者的区别。 为了说明监听套接字与已连接套接字的区别,我们先来看一下套接字在连接中的含义。 从内核的角度来看,一个套接字就是通信的一个端点。一个连接...
-
TCP套接字编程入门
概述 套接字(socket)是一种通信机制,凭借这种机制,客户与服务器的通信既可以在本地单机上进行,也可以跨网络进行。 图:基本的TCP客户/服务器应用程序的套接字函数 图中展示了一对TCP客户与服务器进程之间进行通信时调用套接字函数的交互情况。服务器首先启动,然后监听客户的连接。稍后客户试图...
-
UDP 套接字编程入门
概述 在使用TCP编写的应用程序和使用UDP编写的应用程序之间存在一些本质差异,其原因在于这两个传输层之间的差别:UDP是无连接不可靠的数据报协议,不同于TCP提供的面向连接的可靠字节流。从资源的角度来看,相对来说UDP套接字开销较小,因为不需要维持网络连接,而且因为无需花费时间来连接连接,所...
-
图解UNIX的I/O模型
一、简述 UNIX系统将所有的外部设备都看作一个文件来看待,所有打开的文件都通过文件描述符来引用。文件描述符是一个非负整数,它指向内核中的一个结构体。当打开一个现有文件或创建一个新文件时,内核向进程返回一个文件描述符。而对于一个socket的读写也会有相应的文件描述符,称为socketfd(s...