UNIX环境高级编程 第16章 网络IPC:套接字
2017-05-26 20:41
429 查看
上一章(15章)中介绍了UNIX系统所提供的多种经典进程间通信机制(IPC):管道PIPE、命名管道FIFO、消息队列Message Queue、信号量Semaphore、共享内存Shared Memory,另外还有第10章介绍的信号Signal。这六种IPC各有差异,但是都存在一个共同的限制:它们仅能用于同一台计算机上的进程间通信,不能用于不同计算机间的进程间通信。本章将说明一种既可以用于计算机内进程通信,又可以用于计算机间进程通信的UNIX服务,即:网络IPC:套接字。
套接字描述符
对于套接字(socket)的抽象是向UNIX系统的文件描述符看齐的。换句话说,套接字抽象与文件抽象相似,都是用一个非负整数的描述符来加以引用读写等操作,因此对于很多处理文件的系统API函数来说,它们既能处理文件描述符,又能处理套接字描述符,比如write( )和read( )函数都能接受套接字描述符。
对于文件描述符,我们可以通过调用 open( ) 来得到相应文件的描述符。对于套接字描述符,则可以通过 socket( ) 来获得,其头文件及原型如下:
该函数在成功时返回一个套接字描述符,失败则返回-1。
socket( ) 函数接受三个参数:
之所以存在上面三个参数,是因为网络模型是分层的,比如TCP/IP是四层,而OSI是七层,单一参数无法精确决定网络协议,而前两个参数共同决定的网络协议也可能出现不唯一,当然由于事实上的标准是TCP/IP导致 protocol 通常是0即可决定出具体网络协议。
套接字描述符
对于套接字(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:套接字 - 二
- UNIX环境高级编程(第16章 网络IPC:套接字)
- Unix 环境高级编程 (APUE) 之 网络 IPC:套接字
- UNIX环境高级编程学习之第十六章网络IPC:套接字 - 非阻塞的Socket通信Poll模型(多路复用), 实用Socket通信模板
- UNIX环境高级编程学习之第十六章网络IPC:套接字 - 简单UDP Socket 通信
- UNIX环境高级编程学习之第十六章网络IPC:套接字 - 非阻塞的Socket通信EPoll模型(多路复用), 实用Socket通信模板
- UNIX环境高级编程学习之第十六章网络IPC:套接字 - 简单TCP Socket 通信
- UNIX环境高级编程学习之第十六章网络IPC:套接字 - 套接字选项的使用 (心跳检测、绑定地址复用)
- UNIX环境高级编程学习之第十六章网络IPC:套接字 - 非阻塞的Socket通信Select模型(多路复用), 实用Socket通信模板。
- (十三) [终篇] 一起学 Unix 环境高级编程 (APUE) 之 网络 IPC:套接字
- Unix环境高级编程(十七)网络IPC套接字
- unix环境IPC编程之套接字(二),UDP编程实例
- UNIX环境高级编程——网络基础概念
- UNIX环境高级编程——网络基础概念
- UNIX环境高级编程-读书笔记-网络编程(三)
- UNIX环境高级编程——创建与打开IPC通道
- unix高级环境编程和网络编程环境配置
- UNIX环境高级编程——创建与打开IPC通道
- UNIX环境高级编程-读书笔记-网络编程(一)
- UNIX环境高级编程——创建与打开IPC通道