00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
#ifndef APR_NETWORK_IO_H
00017
#define APR_NETWORK_IO_H
00018
00023
#include "apr.h"
00024
#include "apr_pools.h"
00025
#include "apr_file_io.h"
00026
#include "apr_errno.h"
00027
#include "apr_inherit.h"
00028
00029
#if APR_HAVE_NETINET_IN_H
00030
#include <netinet/in.h>
00031
#endif
00032
00033
#ifdef __cplusplus
00034
extern "C" {
00035
#endif
00036
00043
#ifndef APR_MAX_SECS_TO_LINGER
00044
00045 #define APR_MAX_SECS_TO_LINGER 30
00046
#endif
00047
00048
#ifndef MAX_SECS_TO_LINGER
00049
00050 #define MAX_SECS_TO_LINGER APR_MAX_SECS_TO_LINGER
00051
#endif
00052
00053
#ifndef APRMAXHOSTLEN
00054
00055 #define APRMAXHOSTLEN 256
00056
#endif
00057
00058
#ifndef APR_ANYADDR
00059
00060 #define APR_ANYADDR "0.0.0.0"
00061
#endif
00062
00067 #define APR_SO_LINGER 1
00068 #define APR_SO_KEEPALIVE 2
00069 #define APR_SO_DEBUG 4
00070 #define APR_SO_NONBLOCK 8
00071 #define APR_SO_REUSEADDR 16
00072 #define APR_SO_TIMEOUT 32
00073 #define APR_SO_SNDBUF 64
00074 #define APR_SO_RCVBUF 128
00075 #define APR_SO_DISCONNECTED 256
00076 #define APR_TCP_NODELAY 512
00079 #define APR_TCP_NOPUSH 1024
00080 #define APR_RESET_NODELAY 2048
00086 #define APR_INCOMPLETE_READ 4096
00097 #define APR_INCOMPLETE_WRITE 8192
00100 #define APR_IPV6_V6ONLY 16384
00107 typedef enum {
00108
APR_SHUTDOWN_READ,
00109
APR_SHUTDOWN_WRITE,
00110
APR_SHUTDOWN_READWRITE
00111 }
apr_shutdown_how_e;
00112
00113 #define APR_IPV4_ADDR_OK 0x01
00114 #define APR_IPV6_ADDR_OK 0x02
00116
#if (!APR_HAVE_IN_ADDR)
00117
00121
struct in_addr {
00122 apr_uint32_t s_addr;
00123 };
00124
#endif
00125
00131 #define APR_INET AF_INET
00132
00135
#ifdef AF_UNSPEC
00136
#define APR_UNSPEC AF_UNSPEC
00137
#else
00138 #define APR_UNSPEC 0
00139
#endif
00140
#if APR_HAVE_IPV6
00141
#define APR_INET6 AF_INET6
00142
#endif
00143
00148 #define APR_PROTO_TCP 6
00149 #define APR_PROTO_UDP 17
00150 #define APR_PROTO_SCTP 132
00156 typedef enum {
00157
APR_LOCAL,
00158 APR_REMOTE
00159 }
apr_interface_e;
00160
00166
#if APR_HAVE_INET_ADDR
00167 #define apr_inet_addr inet_addr
00168
#elif APR_HAVE_INET_NETWORK
00169
00173
#define apr_inet_addr inet_network
00174
#endif
00175
00177 typedef struct apr_socket_t apr_socket_t;
00181 typedef struct apr_hdtr_t apr_hdtr_t;
00183 typedef struct in_addr
apr_in_addr_t;
00185 typedef struct apr_ipsubnet_t apr_ipsubnet_t;
00186
00188 typedef apr_uint16_t
apr_port_t;
00189
00193 typedef struct apr_sockaddr_t apr_sockaddr_t;
00197 struct apr_sockaddr_t {
00199 apr_pool_t *
pool;
00201 char *
hostname;
00203 char *
servname;
00205 apr_port_t port;
00207 apr_int32_t
family;
00209
union {
00211 struct sockaddr_in sin;
00212
#if APR_HAVE_IPV6
00213
00214 struct sockaddr_in6 sin6;
00215
#endif
00216
} sa;
00218 apr_socklen_t
salen;
00220 int ipaddr_len;
00223 int addr_str_len;
00226 void *
ipaddr_ptr;
00229 apr_sockaddr_t *
next;
00230 };
00231
00232
#if APR_HAS_SENDFILE
00233
00238 #define APR_SENDFILE_DISCONNECT_SOCKET 1
00239
#endif
00240
00242 struct apr_hdtr_t {
00244 struct iovec*
headers;
00246 int numheaders;
00248 struct iovec*
trailers;
00250 int numtrailers;
00251 };
00252
00253
00254
00264
APR_DECLARE(apr_status_t) apr_socket_create(apr_socket_t **new_sock,
00265
int family,
int type,
00266 apr_pool_t *cont);
00267
00278 APR_DECLARE(apr_status_t) apr_socket_create_ex(apr_socket_t **new_sock,
00279
int family,
int type,
00280
int protocol,
00281 apr_pool_t *cont);
00282
00296 APR_DECLARE(apr_status_t) apr_socket_shutdown(apr_socket_t *thesocket,
00297 apr_shutdown_how_e how);
00298
00300 APR_DECLARE(apr_status_t) apr_shutdown(apr_socket_t *thesocket,
00301 apr_shutdown_how_e how);
00302
00307 APR_DECLARE(apr_status_t) apr_socket_close(apr_socket_t *thesocket);
00308
00316 APR_DECLARE(apr_status_t) apr_socket_bind(apr_socket_t *sock,
00317 apr_sockaddr_t *sa);
00318
00320 APR_DECLARE(apr_status_t) apr_bind(apr_socket_t *sock, apr_sockaddr_t *sa);
00321
00329 APR_DECLARE(apr_status_t) apr_socket_listen(apr_socket_t *sock,
00330 apr_int32_t backlog);
00331
00333 APR_DECLARE(apr_status_t) apr_listen(apr_socket_t *sock, apr_int32_t backlog);
00334
00343 APR_DECLARE(apr_status_t) apr_socket_accept(apr_socket_t **new_sock,
00344 apr_socket_t *sock,
00345 apr_pool_t *connection_pool);
00346
00348 APR_DECLARE(apr_status_t) apr_accept(apr_socket_t **new_sock,
00349 apr_socket_t *sock,
00350 apr_pool_t *connection_pool);
00351
00360 APR_DECLARE(apr_status_t) apr_socket_connect(apr_socket_t *sock,
00361 apr_sockaddr_t *sa);
00362
00364 APR_DECLARE(apr_status_t) apr_connect(apr_socket_t *sock, apr_sockaddr_t *sa);
00365
00389 APR_DECLARE(apr_status_t) apr_sockaddr_info_get(apr_sockaddr_t **sa,
00390 const
char *hostname,
00391 apr_int32_t family,
00392 apr_port_t port,
00393 apr_int32_t flags,
00394 apr_pool_t *p);
00395
00402 APR_DECLARE(apr_status_t) apr_getnameinfo(
char **hostname,
00403 apr_sockaddr_t *sa,
00404 apr_int32_t flags);
00405
00436 APR_DECLARE(apr_status_t) apr_parse_addr_port(
char **addr,
00437
char **scope_id,
00438 apr_port_t *port,
00439 const
char *str,
00440 apr_pool_t *p);
00441
00450 APR_DECLARE(apr_status_t) apr_gethostname(
char *buf,
int len, apr_pool_t *cont);
00451
00458 APR_DECLARE(apr_status_t) apr_socket_data_get(
void **data, const
char *key,
00459 apr_socket_t *sock);
00460
00468 APR_DECLARE(apr_status_t) apr_socket_data_set(apr_socket_t *sock,
void *data,
00469 const
char *key,
00470 apr_status_t (*cleanup)(
void*));
00471
00488 APR_DECLARE(apr_status_t) apr_socket_send(apr_socket_t *sock, const
char *buf,
00489 apr_size_t *len);
00490
00492 APR_DECLARE(apr_status_t) apr_send(apr_socket_t *sock, const
char *buf,
00493 apr_size_t *len);
00494
00512 APR_DECLARE(apr_status_t) apr_socket_sendv(apr_socket_t *sock,
00513 const struct iovec *vec,
00514 apr_int32_t nvec, apr_size_t *len);
00515
00517 APR_DECLARE(apr_status_t) apr_sendv(apr_socket_t *sock,
00518 const struct iovec *vec,
00519 apr_int32_t nvec, apr_size_t *len);
00520
00528 APR_DECLARE(apr_status_t) apr_socket_sendto(apr_socket_t *sock,
00529 apr_sockaddr_t *where,
00530 apr_int32_t flags, const
char *buf,
00531 apr_size_t *len);
00532
00534 APR_DECLARE(apr_status_t) apr_sendto(apr_socket_t *sock, apr_sockaddr_t *where,
00535 apr_int32_t flags, const
char *buf,
00536 apr_size_t *len);
00537
00546 APR_DECLARE(apr_status_t) apr_socket_recvfrom(apr_sockaddr_t *from,
00547 apr_socket_t *sock,
00548 apr_int32_t flags,
char *buf,
00549 apr_size_t *len);
00550
00552 APR_DECLARE(apr_status_t) apr_recvfrom(apr_sockaddr_t *from, apr_socket_t *sock,
00553 apr_int32_t flags,
char *buf,
00554 apr_size_t *len);
00555
00556 #if APR_HAS_SENDFILE || defined(DOXYGEN)
00557
00573 APR_DECLARE(apr_status_t) apr_socket_sendfile(apr_socket_t *sock,
00574 apr_file_t *file,
00575 apr_hdtr_t *hdtr,
00576 apr_off_t *offset,
00577 apr_size_t *len,
00578 apr_int32_t flags);
00579
00581 APR_DECLARE(apr_status_t) apr_sendfile(apr_socket_t *sock, apr_file_t *file,
00582 apr_hdtr_t *hdtr, apr_off_t *offset,
00583 apr_size_t *len, apr_int32_t flags);
00584
00585 #endif
00586
00605 APR_DECLARE(apr_status_t) apr_socket_recv(apr_socket_t *sock,
00606
char *buf, apr_size_t *len);
00607
00609 APR_DECLARE(apr_status_t) apr_recv(apr_socket_t *sock,
00610
char *buf, apr_size_t *len);
00611
00629 APR_DECLARE(apr_status_t) apr_socket_opt_set(apr_socket_t *sock,
00630 apr_int32_t opt, apr_int32_t on);
00631
00633 APR_DECLARE(apr_status_t) apr_setsocketopt(apr_socket_t *sock,
00634 apr_int32_t opt, apr_int32_t on);
00635
00647 APR_DECLARE(apr_status_t) apr_socket_timeout_set(apr_socket_t *sock,
00648 apr_interval_time_t t);
00649
00669 APR_DECLARE(apr_status_t) apr_socket_opt_get(apr_socket_t *sock,
00670 apr_int32_t opt, apr_int32_t *on);
00671
00673 APR_DECLARE(apr_status_t) apr_getsocketopt(apr_socket_t *sock,
00674 apr_int32_t opt, apr_int32_t *on);
00675
00681 APR_DECLARE(apr_status_t) apr_socket_timeout_get(apr_socket_t *sock,
00682 apr_interval_time_t *t);
00683
00690 APR_DECLARE(apr_status_t) apr_socket_atmark(apr_socket_t *sock,
00691
int *atmark);
00692
00699 APR_DECLARE(apr_status_t) apr_socket_addr_get(apr_sockaddr_t **sa,
00700 apr_interface_e which,
00701 apr_socket_t *sock);
00702
00709 APR_DECLARE(apr_status_t) apr_sockaddr_port_set(apr_sockaddr_t *sockaddr,
00710 apr_port_t port);
00711
00718 APR_DECLARE(apr_status_t) apr_sockaddr_port_get(apr_port_t *port,
00719 apr_sockaddr_t *sockaddr);
00720
00728 APR_DECLARE(apr_status_t) apr_sockaddr_ip_set(apr_sockaddr_t *sockaddr,
00729 const
char *addr);
00730
00738 APR_DECLARE(apr_status_t) apr_sockaddr_ip_get(
char **addr,
00739 apr_sockaddr_t *sockaddr);
00740
00751 APR_DECLARE(
int) apr_sockaddr_equal(const apr_sockaddr_t *addr1,
00752 const apr_sockaddr_t *addr2);
00753
00754
00755 #if APR_FILES_AS_SOCKETS || defined(DOXYGEN)
00756
00767 APR_DECLARE(apr_status_t) apr_socket_from_file(apr_socket_t **newsock,
00768 apr_file_t *file);
00769
00770 #endif
00771
00777 APR_DECLARE(apr_status_t) apr_getservbyname(apr_sockaddr_t *sockaddr,
00778 const
char *servname);
00787 APR_DECLARE(apr_status_t) apr_ipsubnet_create(apr_ipsubnet_t **ipsub,
00788 const
char *ipstr,
00789 const
char *mask_or_numbits,
00790 apr_pool_t *p);
00791
00799 APR_DECLARE(
int) apr_ipsubnet_test(apr_ipsubnet_t *ipsub, apr_sockaddr_t *sa);
00800
00801 #if APR_HAS_SO_ACCEPTFILTER || defined(DOXYGEN)
00809 apr_status_t apr_socket_accept_filter(apr_socket_t *sock,
char *name,
00810
char *args);
00811 #endif
00812
00818 APR_DECLARE(apr_status_t) apr_socket_protocol_get(apr_socket_t *sock,
00819
int *protocol);
00820
00824 APR_DECLARE_INHERIT_SET(socket);
00825
00827 APR_DECLARE(
void) apr_socket_set_inherit(apr_socket_t *skt);
00828
00832 APR_DECLARE_INHERIT_UNSET(socket);
00833
00835 APR_DECLARE(
void) apr_socket_unset_inherit(apr_socket_t *skt);
00836
00839 #ifdef __cplusplus
00840 }
00841 #endif
00842
00843 #endif
00844