diff options
author | Joe Orton <jorton@apache.org> | 2006-10-25 10:54:41 +0000 |
---|---|---|
committer | Joe Orton <jorton@apache.org> | 2006-10-25 10:54:41 +0000 |
commit | a3f42085153d3a7533ee7fd8dc283644439f43d2 (patch) | |
tree | 9ba23aed14adc9382614e993a2ae0caaeefa1228 /network_io | |
parent | af33dfa6ab10242eb6733978b5f6a8d3256d5bde (diff) | |
download | apr-a3f42085153d3a7533ee7fd8dc283644439f43d2.tar.gz |
Fixes for the implementation, documentation and test case for
apr_socket_recvfrom();
* network_io/unix/sendrecv.c (apr_socket_recvfrom): Reset the socklen
argument correctly before calling recvfrom. On success, update all
the sockaddr variables for the address returned, not just the port.
* include/apr_network_io.h (apr_socket_recvfrom): Document a little
better.
* test/testsockets.c (sendto_receivefrom): Check that the address is
set correctly.
git-svn-id: https://svn.apache.org/repos/asf/apr/apr/trunk@467600 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'network_io')
-rw-r--r-- | network_io/unix/sendrecv.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/network_io/unix/sendrecv.c b/network_io/unix/sendrecv.c index c1029a14f..5efad149e 100644 --- a/network_io/unix/sendrecv.c +++ b/network_io/unix/sendrecv.c @@ -148,6 +148,8 @@ apr_status_t apr_socket_recvfrom(apr_sockaddr_t *from, apr_socket_t *sock, apr_size_t *len) { apr_ssize_t rv; + + from->salen = sizeof(from->sa); do { rv = recvfrom(sock->socketdes, buf, (*len), flags, @@ -172,7 +174,7 @@ apr_status_t apr_socket_recvfrom(apr_sockaddr_t *from, apr_socket_t *sock, return errno; } - from->port = ntohs(from->sa.sin.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) { |