Fix race for X509 store found by thread sanitizer
[openssl.git] / doc / man3 / BIO_ADDR.pod
1 =pod
2
3 =head1 NAME
4
5 BIO_ADDR, BIO_ADDR_new, BIO_ADDR_dup, BIO_ADDR_clear, BIO_ADDR_free,
6 BIO_ADDR_rawmake,
7 BIO_ADDR_family, BIO_ADDR_rawaddress, BIO_ADDR_rawport,
8 BIO_ADDR_hostname_string, BIO_ADDR_service_string,
9 BIO_ADDR_path_string - BIO_ADDR routines
10
11 =head1 SYNOPSIS
12
13  #include <sys/types.h>
14  #include <openssl/bio.h>
15
16  typedef union bio_addr_st BIO_ADDR;
17
18  BIO_ADDR *BIO_ADDR_new(void);
19  BIO_ADDR *BIO_ADDR_dup(const BIO_ADDR *ap);
20  void BIO_ADDR_free(BIO_ADDR *);
21  void BIO_ADDR_clear(BIO_ADDR *ap);
22  int BIO_ADDR_rawmake(BIO_ADDR *ap, int family,
23                       const void *where, size_t wherelen, unsigned short port);
24  int BIO_ADDR_family(const BIO_ADDR *ap);
25  int BIO_ADDR_rawaddress(const BIO_ADDR *ap, void *p, size_t *l);
26  unsigned short BIO_ADDR_rawport(const BIO_ADDR *ap);
27  char *BIO_ADDR_hostname_string(const BIO_ADDR *ap, int numeric);
28  char *BIO_ADDR_service_string(const BIO_ADDR *ap, int numeric);
29  char *BIO_ADDR_path_string(const BIO_ADDR *ap);
30
31 =head1 DESCRIPTION
32
33 The B<BIO_ADDR> type is a wrapper around all types of socket
34 addresses that OpenSSL deals with, currently transparently
35 supporting AF_INET, AF_INET6 and AF_UNIX according to what's
36 available on the platform at hand.
37
38 BIO_ADDR_new() creates a new unfilled B<BIO_ADDR>, to be used
39 with routines that will fill it with information, such as
40 BIO_accept_ex().
41
42 BIO_ADDR_dup() creates a new B<BIO_ADDR>, with a copy of the
43 address data in B<ap>.
44
45 BIO_ADDR_free() frees a B<BIO_ADDR> created with BIO_ADDR_new()
46 or BIO_ADDR_dup();
47
48 BIO_ADDR_clear() clears any data held within the provided B<BIO_ADDR> and sets
49 it back to an uninitialised state.
50
51 BIO_ADDR_rawmake() takes a protocol B<family>, a byte array of
52 size B<wherelen> with an address in network byte order pointed at
53 by B<where> and a port number in network byte order in B<port> (except
54 for the B<AF_UNIX> protocol family, where B<port> is meaningless and
55 therefore ignored) and populates the given B<BIO_ADDR> with them.
56 In case this creates a B<AF_UNIX> B<BIO_ADDR>, B<wherelen> is expected
57 to be the length of the path string (not including the terminating
58 NUL, such as the result of a call to strlen()).
59 Read on about the addresses in L</RAW ADDRESSES> below.
60
61 BIO_ADDR_family() returns the protocol family of the given
62 B<BIO_ADDR>.  The possible non-error results are one of the
63 constants AF_INET, AF_INET6 and AF_UNIX. It will also return AF_UNSPEC if the
64 BIO_ADDR has not been initialised.
65
66 BIO_ADDR_rawaddress() will write the raw address of the given
67 B<BIO_ADDR> in the area pointed at by B<p> if B<p> is non-NULL,
68 and will set B<*l> to be the amount of bytes the raw address
69 takes up if B<l> is non-NULL.
70 A technique to only find out the size of the address is a call
71 with B<p> set to B<NULL>.  The raw address will be in network byte
72 order, most significant byte first.
73 In case this is a B<AF_UNIX> B<BIO_ADDR>, B<l> gets the length of the
74 path string (not including the terminating NUL, such as the result of
75 a call to strlen()).
76 Read on about the addresses in L</RAW ADDRESSES> below.
77
78 BIO_ADDR_rawport() returns the raw port of the given B<BIO_ADDR>.
79 The raw port will be in network byte order.
80
81 BIO_ADDR_hostname_string() returns a character string with the
82 hostname of the given B<BIO_ADDR>.  If B<numeric> is 1, the string
83 will contain the numerical form of the address.  This only works for
84 B<BIO_ADDR> of the protocol families AF_INET and AF_INET6.  The
85 returned string has been allocated on the heap and must be freed
86 with OPENSSL_free().
87
88 BIO_ADDR_service_string() returns a character string with the
89 service name of the port of the given B<BIO_ADDR>.  If B<numeric>
90 is 1, the string will contain the port number.  This only works
91 for B<BIO_ADDR> of the protocol families AF_INET and AF_INET6.  The
92 returned string has been allocated on the heap and must be freed
93 with OPENSSL_free().
94
95 BIO_ADDR_path_string() returns a character string with the path
96 of the given B<BIO_ADDR>.  This only works for B<BIO_ADDR> of the
97 protocol family AF_UNIX.  The returned string has been allocated
98 on the heap and must be freed with OPENSSL_free().
99
100 =head1 RAW ADDRESSES
101
102 Both BIO_ADDR_rawmake() and BIO_ADDR_rawaddress() take a pointer to a
103 network byte order address of a specific site.  Internally, those are
104 treated as a pointer to B<struct in_addr> (for B<AF_INET>), B<struct
105 in6_addr> (for B<AF_INET6>) or B<char *> (for B<AF_UNIX>), all
106 depending on the protocol family the address is for.
107
108 =head1 RETURN VALUES
109
110 The string producing functions BIO_ADDR_hostname_string(),
111 BIO_ADDR_service_string() and BIO_ADDR_path_string() will
112 return B<NULL> on error and leave an error indication on the
113 OpenSSL error stack.
114
115 All other functions described here return 0 or B<NULL> when the
116 information they should return isn't available.
117
118 =head1 SEE ALSO
119
120 L<BIO_connect(3)>, L<BIO_s_connect(3)>
121
122 =head1 HISTORY
123
124 BIO_ADDR_dup() was added in OpenSSL 3.1.
125
126 =head1 COPYRIGHT
127
128 Copyright 2016-2022 The OpenSSL Project Authors. All Rights Reserved.
129
130 Licensed under the Apache License 2.0 (the "License").  You may not use
131 this file except in compliance with the License.  You can obtain a copy
132 in the file LICENSE in the source distribution or at
133 L<https://www.openssl.org/source/license.html>.
134
135 =cut