Main Page | Modules | Data Structures | File List | Data Fields | Globals | Related Pages

apr_network_io.h

Go to the documentation of this file.
00001 /* ====================================================================
00002  * The Apache Software License, Version 1.1
00003  *
00004  * Copyright (c) 2000-2003 The Apache Software Foundation.  All rights
00005  * reserved.
00006  *
00007  * Redistribution and use in source and binary forms, with or without
00008  * modification, are permitted provided that the following conditions
00009  * are met:
00010  *
00011  * 1. Redistributions of source code must retain the above copyright
00012  *    notice, this list of conditions and the following disclaimer.
00013  *
00014  * 2. Redistributions in binary form must reproduce the above copyright
00015  *    notice, this list of conditions and the following disclaimer in
00016  *    the documentation and/or other materials provided with the
00017  *    distribution.
00018  *
00019  * 3. The end-user documentation included with the redistribution,
00020  *    if any, must include the following acknowledgment:
00021  *       "This product includes software developed by the
00022  *        Apache Software Foundation (http://www.apache.org/)."
00023  *    Alternately, this acknowledgment may appear in the software itself,
00024  *    if and wherever such third-party acknowledgments normally appear.
00025  *
00026  * 4. The names "Apache" and "Apache Software Foundation" must
00027  *    not be used to endorse or promote products derived from this
00028  *    software without prior written permission. For written
00029  *    permission, please contact apache@apache.org.
00030  *
00031  * 5. Products derived from this software may not be called "Apache",
00032  *    nor may "Apache" appear in their name, without prior written
00033  *    permission of the Apache Software Foundation.
00034  *
00035  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
00036  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
00037  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
00038  * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
00039  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
00040  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
00041  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
00042  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
00043  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
00044  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
00045  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
00046  * SUCH DAMAGE.
00047  * ====================================================================
00048  *
00049  * This software consists of voluntary contributions made by many
00050  * individuals on behalf of the Apache Software Foundation.  For more
00051  * information on the Apache Software Foundation, please see
00052  * <http://www.apache.org/>.
00053  */
00054 
00055 #ifndef APR_NETWORK_IO_H
00056 #define APR_NETWORK_IO_H
00057 
00062 #include "apr.h"
00063 #include "apr_pools.h"
00064 #include "apr_file_io.h"
00065 #include "apr_errno.h"
00066 #include "apr_inherit.h" 
00067 
00068 #if APR_HAVE_NETINET_IN_H
00069 #include <netinet/in.h>
00070 #endif
00071 
00072 #ifdef __cplusplus
00073 extern "C" {
00074 #endif /* __cplusplus */
00075 
00082 #ifndef APR_MAX_SECS_TO_LINGER
00083 
00084 #define APR_MAX_SECS_TO_LINGER 30
00085 #endif
00086 
00087 #ifndef MAX_SECS_TO_LINGER
00088 
00089 #define MAX_SECS_TO_LINGER APR_MAX_SECS_TO_LINGER
00090 #endif
00091 
00092 #ifndef APRMAXHOSTLEN
00093 
00094 #define APRMAXHOSTLEN 256
00095 #endif
00096 
00097 #ifndef APR_ANYADDR
00098 
00099 #define APR_ANYADDR "0.0.0.0"
00100 #endif
00101 
00106 #define APR_SO_LINGER        1    
00107 #define APR_SO_KEEPALIVE     2    
00108 #define APR_SO_DEBUG         4    
00109 #define APR_SO_NONBLOCK      8    
00110 #define APR_SO_REUSEADDR     16   
00111 #define APR_SO_TIMEOUT       32   
00112 #define APR_SO_SNDBUF        64   
00113 #define APR_SO_RCVBUF        128  
00114 #define APR_SO_DISCONNECTED  256  
00115 #define APR_TCP_NODELAY      512  
00118 #define APR_TCP_NOPUSH       1024 
00119 #define APR_RESET_NODELAY    2048 
00125 #define APR_INCOMPLETE_READ 4096  
00136 #define APR_INCOMPLETE_WRITE 8192 
00139 #define APR_IPV6_V6ONLY     16384 
00146 typedef enum {
00147     APR_SHUTDOWN_READ,          
00148     APR_SHUTDOWN_WRITE,         
00149     APR_SHUTDOWN_READWRITE      
00150 } apr_shutdown_how_e;
00151 
00152 #define APR_IPV4_ADDR_OK  0x01  
00153 #define APR_IPV6_ADDR_OK  0x02  
00155 #if (!APR_HAVE_IN_ADDR)
00156 
00160 struct in_addr {
00161     apr_uint32_t  s_addr; 
00162 };
00163 #endif
00164 
00170 #define APR_INET     AF_INET
00171 
00174 #ifdef AF_UNSPEC
00175 #define APR_UNSPEC   AF_UNSPEC
00176 #else
00177 #define APR_UNSPEC   0
00178 #endif
00179 #if APR_HAVE_IPV6
00180 #define APR_INET6    AF_INET6
00181 #endif
00182 
00187 #define APR_PROTO_TCP       6   
00188 #define APR_PROTO_UDP      17   
00189 #define APR_PROTO_SCTP    132   
00195 typedef enum {
00196     APR_LOCAL,
00197     APR_REMOTE
00198 } apr_interface_e;
00199 
00205 #if APR_HAVE_INET_ADDR
00206 #define apr_inet_addr    inet_addr
00207 #elif APR_HAVE_INET_NETWORK        /* only DGUX, as far as I know */
00208 
00212 #define apr_inet_addr    inet_network
00213 #endif
00214 
00216 typedef struct apr_socket_t     apr_socket_t;
00220 typedef struct apr_hdtr_t       apr_hdtr_t;
00222 typedef struct in_addr          apr_in_addr_t;
00224 typedef struct apr_ipsubnet_t apr_ipsubnet_t;
00225 
00227 typedef apr_uint16_t            apr_port_t;
00228 
00232 typedef struct apr_sockaddr_t apr_sockaddr_t;
00236 struct apr_sockaddr_t {
00238     apr_pool_t *pool;
00240     char *hostname;
00242     char *servname;
00244     apr_port_t port;
00246     apr_int32_t family;
00248     union {
00250         struct sockaddr_in sin;
00251 #if APR_HAVE_IPV6
00252 
00253         struct sockaddr_in6 sin6;
00254 #endif
00255     } sa;
00257     apr_socklen_t salen;
00259     int ipaddr_len;
00262     int addr_str_len;
00265     void *ipaddr_ptr;
00268     apr_sockaddr_t *next;
00269 };
00270 
00271 #if APR_HAS_SENDFILE
00272 
00277 #define APR_SENDFILE_DISCONNECT_SOCKET      1
00278 #endif
00279 
00281 struct apr_hdtr_t {
00283     struct iovec* headers;
00285     int numheaders;
00287     struct iovec* trailers;
00289     int numtrailers;
00290 };
00291 
00292 /* function definitions */
00293 
00303 APR_DECLARE(apr_status_t) apr_socket_create(apr_socket_t **new_sock, 
00304                                             int family, int type,
00305                                             apr_pool_t *cont);
00306 
00317 APR_DECLARE(apr_status_t) apr_socket_create_ex(apr_socket_t **new_sock, 
00318                                                int family, int type,
00319                                                int protocol,
00320                                                apr_pool_t *cont);
00321 
00335 APR_DECLARE(apr_status_t) apr_socket_shutdown(apr_socket_t *thesocket,
00336                                               apr_shutdown_how_e how);
00337 
00339 APR_DECLARE(apr_status_t) apr_shutdown(apr_socket_t *thesocket,
00340                                        apr_shutdown_how_e how);
00341 
00346 APR_DECLARE(apr_status_t) apr_socket_close(apr_socket_t *thesocket);
00347 
00355 APR_DECLARE(apr_status_t) apr_socket_bind(apr_socket_t *sock, 
00356                                           apr_sockaddr_t *sa);
00357 
00359 APR_DECLARE(apr_status_t) apr_bind(apr_socket_t *sock, apr_sockaddr_t *sa);
00360 
00368 APR_DECLARE(apr_status_t) apr_socket_listen(apr_socket_t *sock, 
00369                                             apr_int32_t backlog);
00370 
00372 APR_DECLARE(apr_status_t) apr_listen(apr_socket_t *sock, apr_int32_t backlog);
00373 
00382 APR_DECLARE(apr_status_t) apr_socket_accept(apr_socket_t **new_sock, 
00383                                             apr_socket_t *sock,
00384                                             apr_pool_t *connection_pool);
00385 
00387 APR_DECLARE(apr_status_t) apr_accept(apr_socket_t **new_sock, 
00388                                      apr_socket_t *sock,
00389                                      apr_pool_t *connection_pool);
00390 
00399 APR_DECLARE(apr_status_t) apr_socket_connect(apr_socket_t *sock,
00400                                              apr_sockaddr_t *sa);
00401 
00403 APR_DECLARE(apr_status_t) apr_connect(apr_socket_t *sock, apr_sockaddr_t *sa);
00404 
00428 APR_DECLARE(apr_status_t) apr_sockaddr_info_get(apr_sockaddr_t **sa,
00429                                           const char *hostname,
00430                                           apr_int32_t family,
00431                                           apr_port_t port,
00432                                           apr_int32_t flags,
00433                                           apr_pool_t *p);
00434 
00441 APR_DECLARE(apr_status_t) apr_getnameinfo(char **hostname,
00442                                           apr_sockaddr_t *sa,
00443                                           apr_int32_t flags);
00444 
00475 APR_DECLARE(apr_status_t) apr_parse_addr_port(char **addr,
00476                                               char **scope_id,
00477                                               apr_port_t *port,
00478                                               const char *str,
00479                                               apr_pool_t *p);
00480 
00489 APR_DECLARE(apr_status_t) apr_gethostname(char *buf, int len, apr_pool_t *cont);
00490 
00497 APR_DECLARE(apr_status_t) apr_socket_data_get(void **data, const char *key,
00498                                               apr_socket_t *sock);
00499 
00507 APR_DECLARE(apr_status_t) apr_socket_data_set(apr_socket_t *sock, void *data,
00508                                               const char *key,
00509                                               apr_status_t (*cleanup)(void*));
00510 
00527 APR_DECLARE(apr_status_t) apr_socket_send(apr_socket_t *sock, const char *buf, 
00528                                           apr_size_t *len);
00529 
00531 APR_DECLARE(apr_status_t) apr_send(apr_socket_t *sock, const char *buf, 
00532                                    apr_size_t *len);
00533 
00551 APR_DECLARE(apr_status_t) apr_socket_sendv(apr_socket_t *sock, 
00552                                            const struct iovec *vec,
00553                                            apr_int32_t nvec, apr_size_t *len);
00554 
00556 APR_DECLARE(apr_status_t) apr_sendv(apr_socket_t *sock, 
00557                                     const struct iovec *vec,
00558                                     apr_int32_t nvec, apr_size_t *len);
00559 
00567 APR_DECLARE(apr_status_t) apr_socket_sendto(apr_socket_t *sock, 
00568                                             apr_sockaddr_t *where,
00569                                             apr_int32_t flags, const char *buf, 
00570                                             apr_size_t *len);
00571 
00573 APR_DECLARE(apr_status_t) apr_sendto(apr_socket_t *sock, apr_sockaddr_t *where,
00574                                      apr_int32_t flags, const char *buf, 
00575                                      apr_size_t *len);
00576 
00585 APR_DECLARE(apr_status_t) apr_socket_recvfrom(apr_sockaddr_t *from, 
00586                                               apr_socket_t *sock,
00587                                               apr_int32_t flags, char *buf, 
00588                                               apr_size_t *len);
00589  
00591 APR_DECLARE(apr_status_t) apr_recvfrom(apr_sockaddr_t *from, apr_socket_t *sock,
00592                                        apr_int32_t flags, char *buf, 
00593                                        apr_size_t *len);
00594 
00595 #if APR_HAS_SENDFILE || defined(DOXYGEN)
00596 
00612 APR_DECLARE(apr_status_t) apr_socket_sendfile(apr_socket_t *sock, 
00613                                               apr_file_t *file,
00614                                               apr_hdtr_t *hdtr,
00615                                               apr_off_t *offset,
00616                                               apr_size_t *len,
00617                                               apr_int32_t flags);
00618 
00620 APR_DECLARE(apr_status_t) apr_sendfile(apr_socket_t *sock, apr_file_t *file,
00621                                        apr_hdtr_t *hdtr, apr_off_t *offset,
00622                                        apr_size_t *len, apr_int32_t flags);
00623 
00624 #endif /* APR_HAS_SENDFILE */
00625 
00644 APR_DECLARE(apr_status_t) apr_socket_recv(apr_socket_t *sock, 
00645                                    char *buf, apr_size_t *len);
00646 
00648 APR_DECLARE(apr_status_t) apr_recv(apr_socket_t *sock, 
00649                                    char *buf, apr_size_t *len);
00650 
00668 APR_DECLARE(apr_status_t) apr_socket_opt_set(apr_socket_t *sock,
00669                                              apr_int32_t opt, apr_int32_t on);
00670 
00672 APR_DECLARE(apr_status_t) apr_setsocketopt(apr_socket_t *sock,
00673                                            apr_int32_t opt, apr_int32_t on);
00674 
00686 APR_DECLARE(apr_status_t) apr_socket_timeout_set(apr_socket_t *sock,
00687                                                  apr_interval_time_t t);
00688 
00708 APR_DECLARE(apr_status_t) apr_socket_opt_get(apr_socket_t *sock, 
00709                                              apr_int32_t opt, apr_int32_t *on);
00710 
00712 APR_DECLARE(apr_status_t) apr_getsocketopt(apr_socket_t *sock, 
00713                                            apr_int32_t opt, apr_int32_t *on);
00714 
00720 APR_DECLARE(apr_status_t) apr_socket_timeout_get(apr_socket_t *sock, 
00721                                                  apr_interval_time_t *t);
00722 
00729 APR_DECLARE(apr_status_t) apr_socket_addr_get(apr_sockaddr_t **sa,
00730                                               apr_interface_e which,
00731                                               apr_socket_t *sock);
00732  
00738 APR_DECLARE(apr_status_t) apr_sockaddr_port_set(apr_sockaddr_t *sockaddr,
00739                                                 apr_port_t port);
00740 
00746 APR_DECLARE(apr_status_t) apr_sockaddr_port_get(apr_port_t *port,
00747                                                 apr_sockaddr_t *sockaddr);
00748 
00755 APR_DECLARE(apr_status_t) apr_sockaddr_ip_set(apr_sockaddr_t *sockaddr,
00756                                               const char *addr);
00757 
00765 APR_DECLARE(apr_status_t) apr_sockaddr_ip_get(char **addr, 
00766                                               apr_sockaddr_t *sockaddr);
00767 
00778 APR_DECLARE(int) apr_sockaddr_equal(const apr_sockaddr_t *addr1,
00779                                     const apr_sockaddr_t *addr2);
00780 
00781 
00782 #if APR_FILES_AS_SOCKETS || defined(DOXYGEN)
00783 
00794 APR_DECLARE(apr_status_t) apr_socket_from_file(apr_socket_t **newsock,
00795                                                apr_file_t *file);
00796 
00797 #endif /* APR_FILES_AS_SOCKETS */
00798 
00804 APR_DECLARE(apr_status_t) apr_getservbyname(apr_sockaddr_t *sockaddr, 
00805                                             const char *servname);
00814 APR_DECLARE(apr_status_t) apr_ipsubnet_create(apr_ipsubnet_t **ipsub, 
00815                                               const char *ipstr, 
00816                                               const char *mask_or_numbits, 
00817                                               apr_pool_t *p);
00818 
00826 APR_DECLARE(int) apr_ipsubnet_test(apr_ipsubnet_t *ipsub, apr_sockaddr_t *sa);
00827 
00828 #if APR_HAS_SO_ACCEPTFILTER || defined(DOXYGEN)
00836 apr_status_t apr_socket_accept_filter(apr_socket_t *sock, char *name,
00837                                       char *args);
00838 #endif
00839 
00845 APR_DECLARE(apr_status_t) apr_socket_protocol_get(apr_socket_t *sock,
00846                                                   int *protocol);
00847 
00851 APR_DECLARE_INHERIT_SET(socket);
00852 
00854 APR_DECLARE(void) apr_socket_set_inherit(apr_socket_t *skt);
00855 
00859 APR_DECLARE_INHERIT_UNSET(socket);
00860 
00862 APR_DECLARE(void) apr_socket_unset_inherit(apr_socket_t *skt);
00863 
00866 #ifdef __cplusplus
00867 }
00868 #endif
00869 
00870 #endif  /* ! APR_NETWORK_IO_H */
00871 

Generated on Sat Aug 27 23:19:13 2005 for Apache Portable Runtime by  doxygen 1.3.9.1