Socket

来自osdev
跳到导航 跳到搜索

Socket套接字基本上是服务器程序与许多客户端通信的一种方式。 套接字可以有几个底层协议: TCP/IP套接字可以在网络上进行通信,Unix套接字可以在本地计算机上进行通信。

一旦在服务器和客户端之间建立了连接,两个进程都将获得一个新的文件描述符,它们可以在其中写入以向另一个进程发送消息并读取由另一个进程发送的消息。 在本地计算机上,这主要就像有两个 pipes,一个以各自方式进行,并共享相同的文件描述符编号。

服务器套接字是接受新连接的部分。 它也是服务器进程中的文件描述符,但不处理通常的读/写请求。 相反,它处理一个 “accept” 系统调用,该系统调用基本上的作用是等待新的连接,当一个到达时建立连接并返回该连接的文件描述符编号。 希望建立连接的客户端必须在服务器套接字上发出connect调用,该调用由文件名 (用于unix套接字) 或网络地址标识。

服务器软件有几种解决方案,可以一次处理与多个对等体的通信。 第一个解决方案是使用多个线程。 大多数unix实现中可用的另一种解决方案是使用 select 系统调用。