diff options
author | peter <peter@FreeBSD.org> | 2013-07-28 05:06:53 +0000 |
---|---|---|
committer | peter <peter@FreeBSD.org> | 2013-07-28 05:06:53 +0000 |
commit | ed0c2f87192e10d255a0e36819e6df2a1d83d5fb (patch) | |
tree | 3c0eb477642c8cddce38b6c98c437cca2f2cbda9 /network_io/unix/sendrecv.c | |
parent | 82321653c0341ed1b1b7a6a654cd9e3acc78d463 (diff) | |
download | FreeBSD-src-ed0c2f87192e10d255a0e36819e6df2a1d83d5fb.zip FreeBSD-src-ed0c2f87192e10d255a0e36819e6df2a1d83d5fb.tar.gz |
Import Apache apr-1.4.8 to vendor staging area.
Diffstat (limited to 'network_io/unix/sendrecv.c')
-rw-r--r-- | network_io/unix/sendrecv.c | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/network_io/unix/sendrecv.c b/network_io/unix/sendrecv.c index c133a26..6b14643 100644 --- a/network_io/unix/sendrecv.c +++ b/network_io/unix/sendrecv.c @@ -174,7 +174,14 @@ apr_status_t apr_socket_recvfrom(apr_sockaddr_t *from, apr_socket_t *sock, return errno; } - apr_sockaddr_vars_set(from, from->sa.sin.sin_family, ntohs(from->sa.sin.sin_port)); + /* + * Check if we have a valid address. recvfrom() with MSG_PEEK may return + * success without filling in the address. + */ + if (from->salen > APR_OFFSETOF(struct sockaddr_in, sin_port)) { + apr_sockaddr_vars_set(from, from->sa.sin.sin_family, + ntohs(from->sa.sin.sin_port)); + } (*len) = rv; if (rv == 0 && sock->type == SOCK_STREAM) { @@ -245,7 +252,7 @@ do_select: /* Define a structure to pass in when we have a NULL header value */ static apr_hdtr_t no_hdtr; -#if defined(__linux__) && defined(HAVE_WRITEV) +#if (defined(__linux__) || defined(__GNU__)) && defined(HAVE_WRITEV) apr_status_t apr_socket_sendfile(apr_socket_t *sock, apr_file_t *file, apr_hdtr_t *hdtr, apr_off_t *offset, @@ -285,9 +292,6 @@ apr_status_t apr_socket_sendfile(apr_socket_t *sock, apr_file_t *file, hdtr = &no_hdtr; } - /* Ignore flags for now. */ - flags = 0; - if (hdtr->numheaders > 0) { apr_size_t hdrbytes; |