首页 理论教育常见系统调用-计算机网络技术

常见系统调用-计算机网络技术

【摘要】:下面以使用TCP 服务为例介绍几种常用的系统调用,供读者参考。当使用TCP 协议的客户已经调用socket 创建了套接字后,客户进程就调用connect,以便和远地服务器建立连接。在connect 系统调用中,客户必须指明远程端点。通常客户使用send 发送请求,而服务器使用send 发送应答。图9.10 给出了系统调用的使用顺序。图9.10TCP 连接释放阶段的系统调用顺序由于UDP 服务器只提供无连接的服务,因此不使用listen 和accept 系统调用。

下面以使用TCP 服务为例介绍几种常用的系统调用,供读者参考。

(1)连接建立阶段

当套接字被创建后,它的端口号和IP 地址都是空的,因此,应用进程要调用bind 来指明套接字的本地地址。在服务器端调用bind 时就是将熟知端口号和本地IP 地址填写到已创建的套接字中。在客户端也可以不调用bind 而由操作系统内核自动分配一个动态端口号。

服务器在调用bind 后,还必须调用listen 将套接字设置为被动方式,以便随时接受客户的服务请求。

服务器紧接着就调用accept,以便将远程客户进程发来的连接请求提取出来。实际上,由于一个服务器必须能够同时处理多个连接,在调用accept 时需要完成很多动作,以便实现这种并发方式,这里从略。

当使用TCP 协议的客户已经调用socket 创建了套接字后,客户进程就调用connect,以便和远地服务器建立连接。在connect 系统调用中,客户必须指明远程端点。

(2)数据传送阶段

客户和服务器都在TCP 连接上使用send 系统调用传送数据,使用recv 系统调用接收数据。通常客户使用send 发送请求,而服务器使用send 发送应答。服务器使用recv 接收客户用send 调用发送的请求。客户在发完请求后用recv 接收应答。

调用send 需要三个变量:数据要发送的套接字的描述符、要发送的数据的地址和数据的长度。通常,send 调用将数据复制到操作系统内核的缓存中,若系统的缓存已满,send 就暂时阻塞,直到缓存有空间存放新的数据。(www.chuimin.cn)

调用recv 也需要三个变量:要使用的套接字的描述符、缓存的地址和缓存空间的长度。

(3)连接释放阶段

一旦客户或服务器结束使用套接字,就将套接字撤销。这时,就调用close 释放连接和撤销套接字。

图9.10 给出了系统调用的使用顺序。有些系统调用在一个TCP 连接中可能会循环使用。

图9.10 TCP 连接释放阶段的系统调用顺序

由于UDP 服务器只提供无连接的服务,因此不使用listen 和accept 系统调用。