diff options
author | Xinchen Hui <laruence@gmail.com> | 2016-06-18 21:33:54 -0700 |
---|---|---|
committer | Xinchen Hui <laruence@gmail.com> | 2016-06-18 21:33:54 -0700 |
commit | 6b83832cf48ec42008b262ace9742fe820d322cd (patch) | |
tree | 9de43b93477a3bd74e435a71731e450498d72839 /main | |
parent | cc64702796ce323840eae5ec7a286788d6b4979c (diff) | |
parent | c4c1993af63fe4c0d19d44ebbd38996471c141af (diff) | |
download | php-git-6b83832cf48ec42008b262ace9742fe820d322cd.tar.gz |
Merge branch 'PHP-5.6' into PHP-7.0
Conflicts:
main/streams/xp_socket.c
Diffstat (limited to 'main')
-rw-r--r-- | main/streams/xp_socket.c | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/main/streams/xp_socket.c b/main/streams/xp_socket.c index 7a21fbef44..bf7e98c56b 100644 --- a/main/streams/xp_socket.c +++ b/main/streams/xp_socket.c @@ -266,16 +266,26 @@ static inline int sock_recvfrom(php_netstream_data_t *sock, char *buf, size_t bu struct sockaddr **addr, socklen_t *addrlen ) { - php_sockaddr_storage sa; - socklen_t sl = sizeof(sa); int ret; int want_addr = textaddr || addr; if (want_addr) { + php_sockaddr_storage sa; + socklen_t sl = sizeof(sa); ret = recvfrom(sock->socket, buf, XP_SOCK_BUF_SIZE(buflen), flags, (struct sockaddr*)&sa, &sl); ret = (ret == SOCK_CONN_ERR) ? -1 : ret; - php_network_populate_name_from_sockaddr((struct sockaddr*)&sa, sl, - textaddr, addr, addrlen); + if (sl) { + php_network_populate_name_from_sockaddr((struct sockaddr*)&sa, sl, + textaddr, addr, addrlen); + } else { + if (textaddr) { + *textaddr = ZSTR_EMPTY_ALLOC(); + } + if (addr) { + *addr = NULL; + *addrlen = 0; + } + } } else { ret = recv(sock->socket, buf, XP_SOCK_BUF_SIZE(buflen), flags); ret = (ret == SOCK_CONN_ERR) ? -1 : ret; |