1251875Speter/* Licensed to the Apache Software Foundation (ASF) under one or more
2251875Speter * contributor license agreements.  See the NOTICE file distributed with
3251875Speter * this work for additional information regarding copyright ownership.
4251875Speter * The ASF licenses this file to You under the Apache License, Version 2.0
5251875Speter * (the "License"); you may not use this file except in compliance with
6251875Speter * the License.  You may obtain a copy of the License at
7251875Speter *
8251875Speter *     http://www.apache.org/licenses/LICENSE-2.0
9251875Speter *
10251875Speter * Unless required by applicable law or agreed to in writing, software
11251875Speter * distributed under the License is distributed on an "AS IS" BASIS,
12251875Speter * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13251875Speter * See the License for the specific language governing permissions and
14251875Speter * limitations under the License.
15251875Speter */
16251875Speter
17251875Speter#ifndef NETWORK_IO_H
18251875Speter#define NETWORK_IO_H
19251875Speter
20251875Speter#include "apr.h"
21251875Speter#include "apr_private.h"
22251875Speter#include "apr_network_io.h"
23251875Speter#include "apr_errno.h"
24251875Speter#include "apr_general.h"
25251875Speter#include "apr_lib.h"
26251875Speter#ifndef WAITIO_USES_POLL
27251875Speter#include "apr_poll.h"
28251875Speter#endif
29251875Speter
30251875Speter/* System headers the network I/O library needs */
31251875Speter#if APR_HAVE_SYS_TYPES_H
32251875Speter#include <sys/types.h>
33251875Speter#endif
34251875Speter#if APR_HAVE_SYS_UIO_H
35251875Speter#include <sys/uio.h>
36251875Speter#endif
37251875Speter#ifdef HAVE_SYS_SELECT_H
38251875Speter#include <sys/select.h>
39251875Speter#endif
40251875Speter#if APR_HAVE_ERRNO_H
41251875Speter#include <errno.h>
42251875Speter#endif
43251875Speter#if APR_HAVE_SYS_TIME_H
44251875Speter#include <sys/time.h>
45251875Speter#endif
46251875Speter#if APR_HAVE_UNISTD_H
47251875Speter#include <unistd.h>
48251875Speter#endif
49251875Speter#if APR_HAVE_STRING_H
50251875Speter#include <string.h>
51251875Speter#endif
52251875Speter#if APR_HAVE_NETINET_TCP_H
53251875Speter#include <netinet/tcp.h>
54251875Speter#endif
55251875Speter#if APR_HAVE_NETINET_SCTP_UIO_H
56251875Speter#include <netinet/sctp_uio.h>
57251875Speter#endif
58251875Speter#if APR_HAVE_NETINET_SCTP_H
59251875Speter#include <netinet/sctp.h>
60251875Speter#endif
61251875Speter#if APR_HAVE_NETINET_IN_H
62251875Speter#include <netinet/in.h>
63251875Speter#endif
64251875Speter#if APR_HAVE_ARPA_INET_H
65251875Speter#include <arpa/inet.h>
66251875Speter#endif
67251875Speter#if APR_HAVE_SYS_SOCKET_H
68251875Speter#include <sys/socket.h>
69251875Speter#endif
70251875Speter#if APR_HAVE_SYS_SOCKIO_H
71251875Speter#include <sys/sockio.h>
72251875Speter#endif
73251875Speter#if APR_HAVE_NETDB_H
74251875Speter#include <netdb.h>
75251875Speter#endif
76251875Speter#if APR_HAVE_FCNTL_H
77251875Speter#include <fcntl.h>
78251875Speter#endif
79251875Speter#if APR_HAVE_SYS_SENDFILE_H
80251875Speter#include <sys/sendfile.h>
81251875Speter#endif
82251875Speter#if APR_HAVE_SYS_IOCTL_H
83251875Speter#include <sys/ioctl.h>
84251875Speter#endif
85251875Speter/* End System Headers */
86251875Speter
87251875Speter#ifndef HAVE_POLLIN
88251875Speter#define POLLIN   1
89251875Speter#define POLLPRI  2
90251875Speter#define POLLOUT  4
91251875Speter#define POLLERR  8
92251875Speter#define POLLHUP  16
93251875Speter#define POLLNVAL 32
94251875Speter#endif
95251875Speter
96251875Spetertypedef struct sock_userdata_t sock_userdata_t;
97251875Speterstruct sock_userdata_t {
98251875Speter    sock_userdata_t *next;
99251875Speter    const char *key;
100251875Speter    void *data;
101251875Speter};
102251875Speter
103251875Speterstruct apr_socket_t {
104251875Speter    apr_pool_t *pool;
105251875Speter    int socketdes;
106251875Speter    int type;
107251875Speter    int protocol;
108251875Speter    apr_sockaddr_t *local_addr;
109251875Speter    apr_sockaddr_t *remote_addr;
110251875Speter    apr_interval_time_t timeout;
111251875Speter#ifndef HAVE_POLL
112251875Speter    int connected;
113251875Speter#endif
114251875Speter    int local_port_unknown;
115251875Speter    int local_interface_unknown;
116251875Speter    int remote_addr_unknown;
117251875Speter    apr_int32_t options;
118251875Speter    apr_int32_t inherit;
119251875Speter    sock_userdata_t *userdata;
120251875Speter#ifndef WAITIO_USES_POLL
121251875Speter    /* if there is a timeout set, then this pollset is used */
122251875Speter    apr_pollset_t *pollset;
123251875Speter#endif
124251875Speter};
125251875Speter
126251875Speterconst char *apr_inet_ntop(int af, const void *src, char *dst, apr_size_t size);
127251875Speterint apr_inet_pton(int af, const char *src, void *dst);
128251875Spetervoid apr_sockaddr_vars_set(apr_sockaddr_t *, int, apr_port_t);
129251875Speter
130251875Speter#define apr_is_option_set(skt, option)  \
131251875Speter    (((skt)->options & (option)) == (option))
132251875Speter
133251875Speter#define apr_set_option(skt, option, on) \
134251875Speter    do {                                 \
135251875Speter        if (on)                          \
136251875Speter            (skt)->options |= (option);         \
137251875Speter        else                             \
138251875Speter            (skt)->options &= ~(option);        \
139251875Speter    } while (0)
140251875Speter
141251875Speter#endif  /* ! NETWORK_IO_H */
142251875Speter
143