第15章 套接字
在本章中,我们将介绍进程间通信的另一种方法,与我们在第13、14章讨论的方法相比,它有着明显的不同。到目前为止,我们讨论的所有机制都依靠一台计算机系统的共享资源实现。这里的资源可以是文件系统空间、共享的物理内存或消息队列,但只有运行在同一台机器上的进程才能使用它们。
伯克利版本的UNIX系统引入了一种新的通信工具——套接字接口(socket interface),它是我们在第13章介绍的管道概念的一个扩展。Linux系统支持套接字接口。你可以通过与使用管道类似的方法来使用套接字,但套接字还包括了计算机网络中的通信。一台机器上的进程可以使用套接字和另外一台机器上的进程通信,这样就可以支持分布在网络中的客户/服务器系统。同一台机器上的进程之间也可以使用套接字进行通信。
此外,微软的Windows系统也通过可公开获取的Windows Sockets技术规范(简称WinSock)实现了套接字接口。Windows系统的套接字服务是由系统文件Winsock.dll来提供的。因此,Windows程序可以通过网络和Linux/UNIX计算机进行通信来实现客户/服务器系统,反之亦然。虽然WinSock的编程接口和UNIX套接字不尽相同,但它同样是以套接字为基础的。
Linux丰富的网络功能不可能只用一章的篇幅就完全涵盖,所以我们将在本章中对主要的网络编程接口进行介绍。掌握了本章的内容后,你就可以开始编写自己的网络程序了。我们将主要介绍下面的内容:
❑ 套接字连接的工作原理
❑ 套接字的属性、地址和通信
❑ 网络信息和互联网守护进程(inetd/xinetd)
❑ 客户和服务器