对EINTR的处理

调用系统调用的时候,有时系统调用会被中断.此时,系统调用会返回-1,并且错误码被置为EINTR.但是,有时并不将这样的情况作为错误.有两种处理方法:

1.如果错误码为EINTR则重新调用系统调用,例如Postgresql中有一段代码:

retry1: if (send(port->sock, &SSLok, 1, 0) != 1) { if (errno == EINTR) goto retry1; /* if interrupted, just retry */

2.重新定义系统调用,忽略错误码为EINTR的情况.例如,Cherokee中的一段代码:

int cherokee_stat (const char *restrict path, struct stat *buf) { int re; do { re = stat (path, buf); } while ((re == -1) && (errno == EINTR)); return re; }

你可能感兴趣的:(struct,PostgreSQL,Path)