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