*** /dev/null Sat Nov 23 01:01:46 2024
--- - Sat Nov 23 01:01:47 2024
***************
*** 0 ****
--- 1,90 ----
+ ##
+ ## SA - Socket Address 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 lmtp2nntp, an LMTP speaking local
+ ## mailer which forwards mails as Usenet news articles via NNTP.
+ ## It can be found at http://www.ossp.com/pkg/lmtp2nntp/.
+ ##
+ ## 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: Unix manual page
+ ##
+
+ =pod
+
+ =head1 NAME
+
+ B<SA> - Socket Address Library
+
+ =head1 SYNOPSIS
+
+ #include "sa.h"
+
+
+ =head1 DESCRIPTION
+
+ B<SA> is a small abstraction library for creating C<struct sockaddr>
+ structures for use with the POSIX socket(3) API. The problem this
+ library solves is that the C<struct sockaddr> is just POSIX' old way
+ of passing different structures into a single API without the use of
+ C<void *> (which did not exist at the time socket(3) was invented).
+
+ B<SA> creates a C<struct sockaddr> which internally shadows C<struct
+ sockaddr_in> (for IPv4 addresses), C<struct sockaddr_in6> (for IPv6
+ addresses if supported by the underlying platform) and C<struct
+ sockaddr_un> (for local Unix domain socket addresses). Although there
+ are more variants, only these three are currently supported by B<SA>.
+
+ The result of a sa_create(3) call is a pointer to the following
+ structure:
+
+ typedef struct {
+ struct sockaddr *sa_buf; /* pointer to struct sockaddr_xx */
+ socklen_t sa_len; /* length of struct sockaddr_xx */
+ int sa_proto; /* protocol identifier */
+ } sa_t;
+
+ The following use cases are currently supported:
+
+ sa_t *sa;
+ int s;
+
+ sa = sa_create(SA_UNIX, "/tmp/socket");
+ sa = sa_create(SA_IP, "tcp", "mail.foo.dom", "25");
+ sa = sa_create(SA_IP, "tcp", "127.0.0.1", "25");
+ sa = sa_create(SA_IP, "tcp", ":::1", "25");
+
+ s = socket(sa->sa_buf->sa_family, SOCK_STREAM, sa->sa_proto);
+ connect(s, sa->sa_buf, sa->sa_len);
+
+ :
+
+ close(s);
+ sa_destroy(ca);
+
+ =head1 AUTHOR
+
+ Ralf S. Engelschall
+ rse@engelschall.com
+ www.engelschall.com
+
+ =cut
+
|