diff options
| author | Anatol Belski <ab@php.net> | 2015-08-11 15:17:25 +0200 |
|---|---|---|
| committer | Anatol Belski <ab@php.net> | 2015-08-11 15:17:25 +0200 |
| commit | 7eb6bd1311a815ec23eb7cf06f6214f4a2d5895a (patch) | |
| tree | d953759731a6e79cc20985e1a050c6f15c64432f /main/streams/xp_socket.c | |
| parent | 8d2b131d9f4a52ea1e03ebeaaf3922abdc308d63 (diff) | |
| download | php-git-7eb6bd1311a815ec23eb7cf06f6214f4a2d5895a.tar.gz | |
add EAGAIN checks
EAGAIN and EWOULDBLOCK should be checked together and don't necessary,
have same value. So checking both is better for portability.
Diffstat (limited to 'main/streams/xp_socket.c')
| -rw-r--r-- | main/streams/xp_socket.c | 8 |
1 files changed, 5 insertions, 3 deletions
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); |
