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