上一章(15章)中介绍了UNIX系统所提供的多种经典进程间通信机制(IPC):管道PIPE、命名管道FIFO、消息队列Message Queue、信号量Semaphore、共享内存Shared Memory,另外还有第10章介绍的信号Signal。这六种IPC各有差异,但是都存在一个共同的限制:它们仅能用于同一台计算机上的进程间通信,不能用于不同计算机间的进程间通信。本章将说明一种既可以用于计算机内进程通信,又可以用于计算机间进程通信的UNIX服务,即:网络IPC:套接字。

套接字描述符

对于套接字(socket)的抽象是向UNIX系统的文件描述符看齐的。换句话说,套接字抽象与文件抽象相似,都是用一个非负整数的描述符来加以引用读写等操作,因此对于很多处理文件的系统API函数来说,它们既能处理文件描述符,又能处理套接字描述符,比如write( )和read( )函数都能接受套接字描述符。

对于文件描述符,我们可以通过调用 open( ) 来得到相应文件的描述符。对于套接字描述符,则可以通过 socket( ) 来获得,其头文件及原型如下:

#include <sys/socket.h>

int socket(int domain, int type, int protocol);

该函数在成功时返回一个套接字描述符,失败则返回-1。

socket( ) 函数接受三个参数:

int domain : 用于确定网络类型

int type : 用于确定协议类型

int protocol : 用于消歧义,决定网络协议

之所以存在上面三个参数,是因为网络模型是分层的,比如TCP/IP是四层,而OSI是七层,单一参数无法精确决定网络协议,而前两个参数共同决定的网络协议也可能出现不唯一,当然由于事实上的标准是TCP/IP导致 protocol 通常是0即可决定出具体网络协议。

UNIX环境高级编程 第16章 网络IPC:套接字的更多相关文章

  1. (十二) 一起学 Unix 环境高级编程 (APUE) 之 进程间通信(IPC)

    . . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编 ...

  2. UNIX环境高级编程 第4章 文件和目录

    第三章说明了关于文件I/O的基本函数,主要是针对普通regular类型文件.本章描述文件的属性,除了regular文件还有其他类型的文件. 函数stat.fstat.fstatat和lstat sta ...

  3. unix环境高级编程第四章笔记

    文件和目录 start fstart lstart函数 一旦给出pathname, start函数就返回了与此命名文件有关的信息结构 #include <sys/start> int st ...

  4. unix环境高级编程第三章笔记

    文件描述符 1.文件描述符的概念 对于内核而言,所有打开的文件都会用一个文件描述符来引用,打开或和创建一个新文件的时候,内核会给进程返回一个文件描述符,而当使用read write时,可以使用这个文件 ...

  5. UNIX环境高级编程 第8章 进程控制

    本章是UNIX系统中进程控制原语,包括进程创建.执行新程序.进程终止,另外还会对进程的属性加以说明,包括进程ID.实际/有效用户ID. 进程标识 每个进程某一时刻在系统中都是独一无二的,它们之间是用一 ...

  6. UNIX环境高级编程 第13章 守护进程

    守护进程daemon是一种生存周期很长的进程.它们通常在系统引导时启动,在系统关闭时终止.守护进程是没有终端的,它们一直在后台运行. 守护进程的特征 在Linux系统中,可以通过命令 ps -efj ...

  7. UNIX环境高级编程 第9章 进程关系

    在第8章学习了进程的控制原语,通过各种进程原语可以对进程进行控制,包括新建进程.执行新程序.终止进程等.在使用fork( )产生新进程后,就出现了进程父子进程的概念,这是进程间的关系.本章更加详细地说 ...

  8. UNIX环境高级编程 第7章 进程环境

    本章涉及C/C++程序中main函数是如何被调用的.命令行参数如何传递给main函数.程序的内存空间布局.程序如何使用环境变量.程序如何终止退出. main函数 C程序或C++程序总是从main函数开 ...

  9. UNIX环境高级编程 第5章 标准I/O库

    本章是关于C语言标准I/O库的,之所以在UNIX类系统的编程中会介绍C语言标准库,主要是因为UNIX和C之间具有密不可分的关系.由于UNIX系统存在很多实现,而每个实现都有自己的标准I/O库,为了统一 ...

随机推荐

  1. git bash使用(markdown版)

    前言 我是通过这个来学习的.个人愚笨,琢磨了半天,终于搞通了,醉了醉了,以前一直使用svn,用git确实有点水土不服.本文以如何使用git为主来展开,不涉及太多理论. git是分布式的版本管理.什么叫 ...

  2. java 数字转中文

    java代码 数字转中文,该方法只做了对int型整数的转换 private static String numberToChinese(int number) { String[] numbers = ...

  3. js & 快捷键 & vue bind bug

    js & 快捷键 & vue bind bug how to prevent addEventListener bind many times solution dataset &am ...

  4. NOIP2017 游记

    没考多好......并不知道该写什么...... 那就写写流水账...... DAY 0 上午到机房,众人全是打板子or颓废的....然后我打完板子去打印了个奇怪的背包九讲.... 然后大巴到德州东, ...

  5. uoj259 & 独立集问题的一些做法

    很早以前就做了一遍这题,当时好像啥都不会,今天重做一下. 这个题题意简单地说就是输入k.p和一个图,求图大小为k的独立集个数mod p. subset1.in  n=24,m=19,k=8 subse ...

  6. C#基础-如何找到devenv的路径位置

    一.前言        今年开始安装了VS2017,有时候需要使用到脚本编译,奈何MS在VS2017上的脚本编译上不再支持VS2015那种 "%VS140COMNTOOLS%vsvars32 ...

  7. 【BootStrap】Table的基本使用

    一.前言        新年新气象,转眼今年就28了,不知道今年能不能把妹成功呢?哈哈哈!上班第一天,部门Web技术主管给每个同事都发了红包鼓励大家今年加油,我作为新转入部门员工不能给团队掉链子,要加 ...

  8. 【BZOJ1914】数三角形(组合数,极角排序)

    [BZOJ1914]数三角形(组合数,极角排序) 题面 BZOJ权限题 良心洛谷 题解 这种姿势很吼啊,表示计算几何啥的一窍不通来着. 题目就是这样,正难则反,所以我们不考虑过原点的三角形, 反过来, ...

  9. 【bzoj2034】 2009国家集训队—最大收益

    http://www.lydsy.com/JudgeOnline/problem.php?id=2034 (题目链接) 题意 n个任务,每个任务只需要一个时刻就可以完成,完成后获得${W_i}$的收益 ...

  10. IntelliJ IDEA详细配置和使用教程-字体、编码和基本设置

    IDEA使用--字体.编码和基本设置 https://blog.csdn.net/frankcheng5143/article/details/50779149 IntelliJ IDEA详细配置和使 ...