c++网络编程学习笔记(3)

来源:互联网 发布:linux性能优化 pdf 编辑:程序博客网 时间:2024/05/16 13:42

 

CHAPTER 2.Socket API 概述
 
一、 操作系统IPC机制概述
操作系统提供的IPC机制一般分为两类:
l       本地IPC ——如 共享内存、管道、门、信号、UNIX领域socket等等,只允许“位于同一计算机上”的实体之间通信。
l       远程IPC ——如 Internet领域socket、X.25电路、Win32命名管道,允许“配置或分布在一个网络上”的实体之间通信。
 
二、 Socket API
Socket API最初是在BSD UNIX中开发的,用来为TCP/IP协议族提供应用程序级接口。
l       在UNIX中,对大多数操作来说,Socket句柄和I/O句柄可以互换使用
l       在Windows中,对大多数操作来说,Socket句柄和I/O不能互换使用,虽然它们的使用目的类似。
 
Socket API包含大约二十多个系统函数,分五类:
1. 本地环境管理
Socket(), bind(), getsockname(),getpeername(),close()
2. 连接的建立和终止
Connect(),listen(),accept(),shutdown()
3. 数据传输机制
Send(),recv(),sendto(),recvfrom()
(UNIX上) Read(),write(),readv(),writev(),sendmsg(),recvmsg()
4. 选项管理
Setsockopt(),getsockopt()
5. 网络地址
Gethostbyname(),gethostbyaddr(),getipnodebyname(),getipnodebyaddr()
Getservbyname()
 
一个通信领域由一个“协议簇”和一个“地址簇”确定。
l       协议簇:一个协议簇是一个协议集合,用来提供一组特定的相关服务。
协议由以下两个参数共同指定:
· 协议簇 ——例如 “UNIX领域”(PF-UNIX) ;
              “INTERNET领域”的IPv4 (PF-INET)和IPv6(PF-INET6) ;
                      ATMA(PF-ATMSVC) ;
                      x.25 (PF-X25) ;
                      Appletalk (PF-APPLETALK) 等等
· 服务类型 ——例如 TCP (SOCK_STREAM)
                                   UDP (SOCK_DGRAM)
例如,通过传递PF_INET和SOCK_STREAM标志给socket()函数,就指定了TCP/IP协议。
l       地址簇:定义地址的格式,表达地址的字节的大小,以及它所包含的字段的数量,类型,顺序等。此外,地址簇还定义了一组解释地址格式的函数。
三、 Socket API的局限性
原始Socket API有几个局限性:容易出错,过于复杂,不可移植或不统一。
1. 容易出错的API
一般来说,操作系统使用句柄来标识其他I/O设备,如文件、管道、终端。这些句柄是通过弱类型的整数或指针类型实现的。
2. 过于复杂的API
Socket API通过一个接口来支持多个:
u       协议簇
u       通信/连接角色
u       通信优化
u       选项
3. 不可移植、不统一的API
u       函数名称 —— 各平台API不一样。
u       函数的语义 —— 某些函数在不同平台上表现出不同的行为。
u       Socket句柄的类型 ——UNIX上是整数,Win32上使用的实际是指针
u       头文件 —— 不同的OS/编译器平台上,包含socket API的头文件不同。
原创粉丝点击