summaryrefslogtreecommitdiff
path: root/main
diff options
context:
space:
mode:
authorXinchen Hui <laruence@gmail.com>2016-06-18 21:33:54 -0700
committerXinchen Hui <laruence@gmail.com>2016-06-18 21:33:54 -0700
commit6b83832cf48ec42008b262ace9742fe820d322cd (patch)
tree9de43b93477a3bd74e435a71731e450498d72839 /main
parentcc64702796ce323840eae5ec7a286788d6b4979c (diff)
parentc4c1993af63fe4c0d19d44ebbd38996471c141af (diff)
downloadphp-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.c18
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;