summaryrefslogtreecommitdiff
path: root/main/streams/xp_socket.c
diff options
context:
space:
mode:
Diffstat (limited to 'main/streams/xp_socket.c')
-rw-r--r--main/streams/xp_socket.c26
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;
}