## ## SA - OSSP Socket Abstraction Library ## Copyright (c) 2001 The OSSP Project (http://www.ossp.org/) ## Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/) ## ## This file is part of OSSP SA, a socket abstraction library which ## can be found at http://www.ossp.org/pkg/sa/. ## ## Permission to use, copy, modify, and distribute this software for ## any purpose with or without fee is hereby granted, provided that ## the above copyright notice and this permission notice appear in all ## copies. ## ## THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED ## WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF ## MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. ## IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR ## CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF ## USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ## ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, ## OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT ## OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF ## SUCH DAMAGE. ## ## sa.pod: socket abstraction library manual page ## =pod =head1 NAME B - Socket Abstraction Library =head1 SYNOPSIS =over 4 =item B: sa_addr_t, sa_t, sa_rc_t. =item B
: sa_u2a, sa_s2a, sa_a2u, sa_a2s. =item B: sa_create, sa_destroy. =item B: sa_timeout, sa_buffers. =item B: sa_bind, sa_connect, sa_listen, sa_accept, sa_getremote, sa_getlocal, sa_getfd, sa_shutdown. =item B: sa_read, sa_readfrom, sa_readline, sa_write, sa_writeto, sa_printf, sa_flush. =back =head1 DESCRIPTION B is a thin abstraction library for the BSD socket interface for use in conjunction with TCP and UDP protocols. It provides the following key features: =over 4 =item B
Most of the uglyness in the BSD socket API is the necessarity to have to deal with the various address structures (C) which exist because of both the different network protocols and addressing schemes. B fully hides this by providing an abstract and opaque address type (C) together with four utility functions which allow one to convert from the old C and an URL specification (C<{tcp,udp}://[:]>) to the C and vice versa. =item B Each function of B is aware of a central timeout (set by sa_timeout(3)), i.e., all I/O operations return C and C set to C if this timeout expired before the operation was able to succeed. This allows one to easily program less-blocking network services. =item B If B is used for TCP-based stream I/O, internally all I/O operations can be performed through input and output buffers (set by sa_buffers(3)) for achieving higher I/O performance by doing I/O operations on larger messages. =item B If B is used for TCP-based stream I/O, for convinience reasons line reading (sa_readline(3)) and output formatting (sa_printf(3)) functions are provided, modelled after STDIO's fgets(3) and fprintf(3). =back =head1 DATA TYPES =over 4 =item B =item B =back =head1 FUNCTIONS =head2 Address Operations =over 4 =item sa_rc_t B(sa_addr_t **I, const char *I, ...); =item sa_rc_t B(sa_addr_t **I, const struct sockaddr *I, socklen_t I); =item sa_rc_t B(const sa_addr_t *I, char **I); =item sa_rc_t B(const sa_addr_t *I, struct sockaddr **I, socklen_t *I); =back =head2 Object Operations =over 4 =item sa_rc_t B(sa_t **I); =item sa_rc_t B(sa_t *I); =back =head2 Parameter Operations =over 4 =item sa_rc_t B(sa_t *I, long I, long I); =item sa_rc_t B(sa_t *I, size_t I, size_t I); =back =head2 Connection Operations =over 4 =item sa_rc_t B(sa_t *I, sa_addr_t *I); =item sa_rc_t B(sa_t *I, sa_addr_t *I); =item sa_rc_t B(sa_t *I, int I); =item sa_rc_t B(sa_t *I, sa_addr_t **I, sa_t **I); =item sa_rc_t B(sa_t *I, sa_addr_t **I); =item sa_rc_t B(sa_t *I, sa_addr_t **I); =item sa_rc_t B(sa_t *I, int *I); =item sa_rc_t B(sa_t *I, char *I); =back =head2 Input/Output Operations =over 4 =item sa_rc_t B(sa_t *I, char *I, size_t I, size_t *I); =item sa_rc_t B(sa_t *I, char *I, size_t I, size_t *I, sa_addr_t **I); =item sa_rc_t B(sa_t *I, char *I, size_t I, size_t *I); =item sa_rc_t B(sa_t *I, const char *I, size_t I, size_t *I); =item sa_rc_t B(sa_t *I, const char *I, size_t I, size_t *I, sa_addr_t *I); =item sa_rc_t B(sa_t *I, const char *I, ...); =item sa_rc_t B(sa_t *I); =back =head1 HISTORY B was invented in August 2001 by Ralf S. Engelschall for use inside the OSSP project. Its creation was prompted by the requirement to implement an SMTP logging channel for B (logging library). Its initial code was derived from a predecessor sub-library originally written for socket address abstraction inside B. =head1 AUTHORS Ralf S. Engelschall rse@engelschall.com www.engelschall.com =cut