From: Anatol Belski Date: Tue, 11 Aug 2015 13:17:25 +0000 (+0200) Subject: add EAGAIN checks X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=7eb6bd1311a815ec23eb7cf06f6214f4a2d5895a;p=php add EAGAIN checks EAGAIN and EWOULDBLOCK should be checked together and don't necessary, have same value. So checking both is better for portability. --- diff --git a/main/streams/xp_socket.c b/main/streams/xp_socket.c index 300a58e491..da80a0a850 100644 --- a/main/streams/xp_socket.c +++ b/main/streams/xp_socket.c @@ -77,10 +77,10 @@ retry: didwrite = send(sock->socket, buf, XP_SOCK_BUF_SIZE(count), (sock->is_blocked && ptimeout) ? MSG_DONTWAIT : 0); if (didwrite <= 0) { - long err = php_socket_errno(); + int err = php_socket_errno(); char *estr; - if (sock->is_blocked && err == EWOULDBLOCK) { + if (sock->is_blocked && (err == EWOULDBLOCK || err == EAGAIN)) { int retval; sock->timeout_event = 0; @@ -152,6 +152,7 @@ static size_t php_sockop_read(php_stream *stream, char *buf, size_t count) { php_netstream_data_t *sock = (php_netstream_data_t*)stream->abstract; ssize_t nr_bytes = 0; + int err; if (!sock || sock->socket == -1) { return 0; @@ -164,8 +165,9 @@ static size_t php_sockop_read(php_stream *stream, char *buf, size_t count) } nr_bytes = recv(sock->socket, buf, XP_SOCK_BUF_SIZE(count), (sock->is_blocked && sock->timeout.tv_sec != -1) ? MSG_DONTWAIT : 0); + err = php_socket_errno(); - stream->eof = (nr_bytes == 0 || (nr_bytes == -1 && php_socket_errno() != EWOULDBLOCK)); + stream->eof = (nr_bytes == 0 || (nr_bytes == -1 && err != EWOULDBLOCK && err != EAGAIN)); if (nr_bytes > 0) { php_stream_notify_progress_increment(PHP_STREAM_CONTEXT(stream), nr_bytes, 0);