]> granicus.if.org Git - php/commitdiff
add EAGAIN checks
authorAnatol Belski <ab@php.net>
Tue, 11 Aug 2015 13:17:25 +0000 (15:17 +0200)
committerAnatol Belski <ab@php.net>
Tue, 11 Aug 2015 13:17:25 +0000 (15:17 +0200)
EAGAIN and EWOULDBLOCK should be checked together and don't necessary,
have same value. So checking both is better for portability.

main/streams/xp_socket.c

index 300a58e491d88336980c0cf0e39230148228e0b5..da80a0a8507e490f706a04abfaeb5082bd3e1b92 100644 (file)
@@ -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);