Этот код работает в Linux:
int r, c;
...
assert(0 == (O_NONBLOCK & fcntl(sockfd, F_GETFL, 0)));
errno = 0;
r = read(sockfd, &c, 1);
if (r == 0 && errno == 0) {
printf("What gives?\n");
}
...
, который выполняет чтение из сокета, иногда возвращает ноль (в r
) и оставляет errno
также равным нулю (0). С какой ситуацией я сталкиваюсь? Я действительно хотел бы иметь блок чтения, если не будет ошибки.