summaryrefslogtreecommitdiffstats
path: root/network_io/unix/sendrecv.c
diff options
context:
space:
mode:
authorpeter <peter@FreeBSD.org>2013-07-28 05:06:53 +0000
committerpeter <peter@FreeBSD.org>2013-07-28 05:06:53 +0000
commited0c2f87192e10d255a0e36819e6df2a1d83d5fb (patch)
tree3c0eb477642c8cddce38b6c98c437cca2f2cbda9 /network_io/unix/sendrecv.c
parent82321653c0341ed1b1b7a6a654cd9e3acc78d463 (diff)
downloadFreeBSD-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.c14
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;
OpenPOWER on IntegriCloud