diff options
author | trawick <trawick@13f79535-47bb-0310-9956-ffa450edef68> | 2001-04-02 23:58:37 +0000 |
---|---|---|
committer | trawick <trawick@13f79535-47bb-0310-9956-ffa450edef68> | 2001-04-02 23:58:37 +0000 |
commit | 8038c802e293da0c3f05dee1e3977a62320f6a5c (patch) | |
tree | ae5243b9bfb7c5bbeb470b2503e174aa1d5faa8e /network_io | |
parent | 5cc76eefe322a703f61dbab24a3d11c330f0c4fa (diff) | |
download | libapr-8038c802e293da0c3f05dee1e3977a62320f6a5c.tar.gz |
fix apr_recvfrom() on Win32 so that it returns APR_EOF only for a
stream socket
git-svn-id: http://svn.apache.org/repos/asf/apr/apr/trunk@61434 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'network_io')
-rw-r--r-- | network_io/win32/sendrecv.c | 10 | ||||
-rw-r--r-- | network_io/win32/sockets.c | 13 |
2 files changed, 9 insertions, 14 deletions
diff --git a/network_io/win32/sendrecv.c b/network_io/win32/sendrecv.c index bda92c44d..8f26e07c4 100644 --- a/network_io/win32/sendrecv.c +++ b/network_io/win32/sendrecv.c @@ -179,22 +179,14 @@ APR_DECLARE(apr_status_t) apr_recvfrom(apr_sockaddr_t *from, { apr_ssize_t rv; - if (from == NULL){ - return APR_ENOMEM; - /* Not sure if this is correct. Maybe we should just allocate - the memory?? - */ - } - rv = recvfrom(sock->sock, buf, (*len), flags, (struct sockaddr*)&from->sa, &from->salen); if (rv == SOCKET_ERROR) { (*len) = 0; return apr_get_netos_error(); } - (*len) = rv; - if (rv == 0) + if (rv == 0 && sock->type == SOCK_STREAM) return APR_EOF; return APR_SUCCESS; diff --git a/network_io/win32/sockets.c b/network_io/win32/sockets.c index 496d09572..679c57f52 100644 --- a/network_io/win32/sockets.c +++ b/network_io/win32/sockets.c @@ -72,8 +72,9 @@ static apr_status_t socket_cleanup(void *sock) return APR_SUCCESS; } -static void set_socket_vars(apr_socket_t *sock, int family) +static void set_socket_vars(apr_socket_t *sock, int family, int type) { + sock->type = type; sock->local_addr->sa.sin.sin_family = family; sock->remote_addr->sa.sin.sin_family = family; @@ -150,7 +151,7 @@ APR_DECLARE(apr_status_t) apr_socket_create(apr_socket_t **new, int ofamily, if ((*new)->sock == INVALID_SOCKET) { return apr_get_netos_error(); } - set_socket_vars(*new, AF_INET); + set_socket_vars(*new, AF_INET, type); (*new)->timeout = -1; (*new)->disconnected = 0; @@ -222,7 +223,7 @@ APR_DECLARE(apr_status_t) apr_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); + set_socket_vars(*new, sock->local_addr->sa.sin.sin_family, SOCK_STREAM); (*new)->timeout = -1; (*new)->disconnected = 0; @@ -326,7 +327,7 @@ APR_DECLARE(apr_status_t) apr_os_sock_make(apr_socket_t **apr_sock, apr_pool_t *cont) { alloc_socket(apr_sock, cont); - set_socket_vars(*apr_sock, os_sock_info->family); + set_socket_vars(*apr_sock, os_sock_info->family, os_sock_info->type); (*apr_sock)->timeout = -1; (*apr_sock)->disconnected = 0; (*apr_sock)->sock = *os_sock_info->os_sock; @@ -358,7 +359,9 @@ APR_DECLARE(apr_status_t) apr_os_sock_put(apr_socket_t **sock, { if ((*sock) == NULL) { alloc_socket(sock, cont); - set_socket_vars(*sock, AF_INET); + /* XXX figure out the actual socket type here */ + /* *or* just decide that apr_os_sock_put() has to be told the family and type */ + set_socket_vars(*sock, AF_INET, SOCK_STREAM); (*sock)->timeout = -1; (*sock)->disconnected = 0; } |