我们用慢系统调用来描写叙述那些可能永远阻塞的系统调用(函数调用),如:accept。read等。永远阻塞的系统调用是指调用有可能永远无法返回。多数网络支持函数都属于这一类。比如,假设没有客户连接到server上,则server对accept的调用就没有返回保证。类似的。假设客户从未发送过一行要求server回射的文本。则server对read的调用将永不返回。其它慢系统调用的样例是对管道和终端设备的读写。
有一个例外,就是磁盘IO。他一般都返回调用者。
当一个进程阻塞与慢系统调用时捕获到一个信号。等到信号处理程序返回时,系统调用可能返回一个EINTR错误。有些内核自己主动重新启动某些被中断的系统调用。
为了便于移植,当我们编写一个捕获信号的程序时(多数并发server捕获SIGCHLD)。我们必须对慢系统调用返回EINTR有所准备。
为了处理一个被中断的accept,我们对accept的调用尽心了处理,其它慢系统调用函数也能够照此思路进行处理:
第一种方法: 用continue进入for的下一次循环,从而重新启动被中断的系统调用。