summaryrefslogtreecommitdiff
path: root/network_io
diff options
context:
space:
mode:
authormturk <mturk@13f79535-47bb-0310-9956-ffa450edef68>2006-09-12 08:48:25 +0000
committermturk <mturk@13f79535-47bb-0310-9956-ffa450edef68>2006-09-12 08:48:25 +0000
commit87eb083d30e5654993b4ca08344efff6f001d8eb (patch)
tree689d5c68d98c53ec7bd3a5b99609103ef6e8418a /network_io
parent2c4e8bc012e5907e37b6c92dbf893e9159e2e70e (diff)
downloadlibapr-87eb083d30e5654993b4ca08344efff6f001d8eb.tar.gz
Backport r442135 from trunk.
git-svn-id: http://svn.apache.org/repos/asf/apr/apr/branches/0.9.x@442526 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'network_io')
-rw-r--r--network_io/unix/sockets.c31
1 files changed, 19 insertions, 12 deletions
diff --git a/network_io/unix/sockets.c b/network_io/unix/sockets.c
index 17d02ca34..8f59b8b40 100644
--- a/network_io/unix/sockets.c
+++ b/network_io/unix/sockets.c
@@ -153,27 +153,34 @@ apr_status_t apr_socket_listen(apr_socket_t *sock, apr_int32_t backlog)
apr_status_t apr_socket_accept(apr_socket_t **new, apr_socket_t *sock,
apr_pool_t *connection_context)
{
- alloc_socket(new, connection_context);
- set_socket_vars(*new, sock->local_addr->sa.sin.sin_family, SOCK_STREAM, sock->protocol);
+ int s;
+ apr_sockaddr_t sa;
-#ifndef HAVE_POLL
- (*new)->connected = 1;
-#endif
- (*new)->timeout = -1;
-
- (*new)->socketdes = accept(sock->socketdes,
- (struct sockaddr *)&(*new)->remote_addr->sa,
- &(*new)->remote_addr->salen);
+ apr_sockaddr_vars_set(&sa, sock->local_addr->sa.sin.sin_family, 0);
+ sa.pool = connection_context;
+ s = accept(sock->socketdes, (struct sockaddr *)&sa.sa, &sa.salen);
- if ((*new)->socketdes < 0) {
+ if (s < 0) {
return errno;
}
#ifdef TPF
- if ((*new)->socketdes == 0) {
+ if (s == 0) {
/* 0 is an invalid socket for TPF */
return APR_EINTR;
}
#endif
+ alloc_socket(new, connection_context);
+ set_socket_vars(*new, sock->local_addr->sa.sin.sin_family, SOCK_STREAM, sock->protocol);
+
+#ifndef HAVE_POLL
+ (*new)->connected = 1;
+#endif
+ (*new)->timeout = -1;
+
+ (*new)->remote_addr_unknown = 0;
+
+ (*new)->socketdes = s;
+ *(*new)->remote_addr = sa;
*(*new)->local_addr = *sock->local_addr;