跳到主要内容

III. 系统调用

以下是用户进程可能执行的典型系统调用。

我们使用如下记法

SYSCALL (ARG1, ARG2....)

其中 SYSCALL 是系统调用的名称, ARGk 等是该系统调用的参数。

CONNECT (P, AEN, FS, CR)​

  • P: 指定进程的一个端口
  • AEN: 指定一个本地套接字;用户号和主机是隐含的
  • FS: 指定任意主机上、具有任意用户号和任意 AEN 的一个套接字
  • CR: 返回的条件码

CONNECT 尝试将 AEN 所指定的本地套接字附接到端口 P, 并与特定的外部套接字 FS 发起连接。CR 的可能取值为:

  • CR=OK: CONNECT 合法, 正在联系套接字 FS。当连接建立或被拒绝时, 状态将会更新。
  • CR = BUSY: 本地套接字正在使用中(非法命令序列)。
  • CR = BADSKT: 套接字规格非法。
  • CR = NOROOM: 本地主机资源已耗尽。
  • CR = HOMOSEX: 发送/接收配对不正确
  • CR = IMP DEAD: 我方 IMP 已失效
  • CR = LINK DEAD: 到外部主机的链路已失效, 原因是: 1. 外部 IMP 已失效, 2. 外部主机已失效, 或 3. 外部 NCP 无响应。

LISTEN (P, AEN, CR)​

  • P: 指定进程的一个端口
  • AEN: 指定一个本地套接字
  • CR: 返回的条件码

AEN 所指定的本地套接字被附接到端口 P。如果存在待处理的呼叫, 则对其进行处理;否则不采取任何行动。当有呼叫到来时, 用户将得到通知。在检查该呼叫后, 用户可以接受或拒绝它。CR 的可能取值为:

  • CR = OK: 连接已开始, 正在监听
  • CR = BUSY
  • CR = NOROOM
  • CR = IMP DEAD
  • CR = LINK DEAD

ACCEPT (P, CR)​

  • P: 指定进程的一个端口
  • CR: 返回的条件码

ACCEPT 意味着用户进程已检查外部套接字以确定是谁在呼叫, 并将接受该呼叫。(注: 一种有趣的替代方案将 ACCEPT 定义为隐含的默认条件。这样, 任何传入的 RFC 都会自动满足 LISTEN。)CR 的可能取值为:

  • CR = BADSKT
  • CR = NOROOM
  • CR = IMP DEAD
  • CR = LINK DEAD
  • CR = BADCOMM: 非法命令序列。(例如, 在 LISTEN 之前发出了 ACCEPT。)
  • CR = PREMCLS: 在本地已收到 RFC 但尚未执行 ACCEPT 之前, 外部用户中止了连接。

TRANSMIT (P, BUFF, BITSRQST, BITSACC, CR)​

  • P: 指定进程的一个端口
  • BUFF: 指定用于传输的文本缓冲区
  • BITSRQST: 指定要传输的长度(以位为单位)
  • BITSACC: 返回实际传输的位数
  • CR: 返回的条件码

进行传输。CR 的可能取值为:

  • CR = OK
  • CR = IMP DEAD
  • CR = LINK DEAD
  • CR = NOT OPEN: 连接未打开(非法命令序列)。
  • CR = BAD BOUND: BITSRQST 越界(例如, 对于接收套接字, BUFF 比 BITSRQST 所指示的要短)。

INT (P, CR)​

  • P: 指定此进程的本地套接字
  • CR: 返回的条件码

此端口另一侧(外部)的进程将被中断。CR 的可能取值为:

  • CR = OK
  • CR = BADSKT
  • CR = BADCOMM
  • CR = IMP DEAD
  • CR = LINK DEAD

STATUS (P, RTAB, CR)​

  • P: 指定此进程的一个端口
  • RTAB: 返回的会合表条目
  • CR: 返回的条件码

与此端口关联的会合表条目的相关字段通过 RTAB 返回。这是用户进程监视连接状态所采用的机制。CR 的可能取值为:

  • CR = OK
  • CR = BADSKT

CLOSE (P, CR)​

  • P: 指定此进程的一个端口
  • CR: 返回的条件码

附接到此端口的连接上的活动停止, 连接被断开, 端口被释放以供他用。CR 的可能取值为:

  • CR = OK
  • CR = BADSKT
  • CR = BADCOMM
  • CR = IMP DEAD
  • CR = LINK DEAD