errno

EINTR

如果进程在执行一个低速系统调用而阻塞期间捕捉到一个信号, 则该系统调用就被中断不在继续执行. 该系统调用返回出错, 其 errno 设置为 EINTR . 这样处理是因为一个信号发生了, 进程捕捉到它, 这意味着已经发生了某种事情, 所以是个好机会应当唤醒阻塞的系统调用. 这里需要区分系统调用和函数, 当捕捉到信号时, 被中断的是内核中执行的系统调用. 这些低速调用是指有可能会使进程永远阻塞的一类系统调用. 包括读管道、终端设备和网络设备.

EINPROGRESS

当调用 connect 函数连接套接字时, 如果套接字是非阻塞的并且连接不能马上完成. 函数返回 -1 并且其 errno 设置为 EINPROGRESS . 可以调用 select 和 poll 函数来检测套接字的可写状态, 当显示套接字可写时, 调用 getsockopt 读取 SOL_SOCKET 的 SO_ERROR 选项来判断连接是否成功, 如果连接成功那么 SO_ERROR 将为 0, 否则将返回一个适当的错误码.