diff options
Diffstat (limited to 'main/streams/xp_socket.c')
-rw-r--r-- | main/streams/xp_socket.c | 26 |
1 files changed, 13 insertions, 13 deletions
diff --git a/main/streams/xp_socket.c b/main/streams/xp_socket.c index f79fa16d5f..511e1570d1 100644 --- a/main/streams/xp_socket.c +++ b/main/streams/xp_socket.c @@ -56,10 +56,10 @@ const php_stream_ops php_stream_unixdg_socket_ops; static int php_tcp_sockop_set_option(php_stream *stream, int option, int value, void *ptrparam); /* {{{ Generic socket stream operations */ -static size_t php_sockop_write(php_stream *stream, const char *buf, size_t count) +static ssize_t php_sockop_write(php_stream *stream, const char *buf, size_t count) { php_netstream_data_t *sock = (php_netstream_data_t*)stream->abstract; - int didwrite; + ssize_t didwrite; struct timeval *ptimeout; if (!sock || sock->socket == -1) { @@ -109,10 +109,6 @@ retry: php_stream_notify_progress_increment(PHP_STREAM_CONTEXT(stream), didwrite, 0); } - if (didwrite < 0) { - didwrite = 0; - } - return didwrite; } @@ -146,14 +142,14 @@ static void php_sock_stream_wait_for_data(php_stream *stream, php_netstream_data } } -static size_t php_sockop_read(php_stream *stream, char *buf, size_t count) +static ssize_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; + return -1; } if (sock->is_blocked) { @@ -165,16 +161,20 @@ 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 && err != EWOULDBLOCK && err != EAGAIN)); + if (nr_bytes < 0) { + if (err == EAGAIN || err == EWOULDBLOCK) { + nr_bytes = 0; + } else { + stream->eof = 1; + } + } else if (nr_bytes == 0) { + stream->eof = 1; + } if (nr_bytes > 0) { php_stream_notify_progress_increment(PHP_STREAM_CONTEXT(stream), nr_bytes, 0); } - if (nr_bytes < 0) { - nr_bytes = 0; - } - return nr_bytes; } |