summaryrefslogtreecommitdiff
path: root/main/streams/xp_socket.c
diff options
context:
space:
mode:
authorAnatol Belski <ab@php.net>2015-08-11 15:17:25 +0200
committerAnatol Belski <ab@php.net>2015-08-11 15:17:25 +0200
commit7eb6bd1311a815ec23eb7cf06f6214f4a2d5895a (patch)
treed953759731a6e79cc20985e1a050c6f15c64432f /main/streams/xp_socket.c
parent8d2b131d9f4a52ea1e03ebeaaf3922abdc308d63 (diff)
downloadphp-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.c8
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);