123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129 |
- '\" t
- .\" Title: ne_sock_init
- .\" Author:
- .\" Generator: DocBook XSL Stylesheets vsnapshot <http://docbook.sf.net/>
- .\" Date: 20 September 2021
- .\" Manual: neon API reference
- .\" Source: neon 0.32.1
- .\" Language: English
- .\"
- .TH "NE_SOCK_INIT" "3" "20 September 2021" "neon 0.32.1" "neon API reference"
- .\" -----------------------------------------------------------------
- .\" * Define some portability stuff
- .\" -----------------------------------------------------------------
- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- .\" http://bugs.debian.org/507673
- .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- .ie \n(.g .ds Aq \(aq
- .el .ds Aq '
- .\" -----------------------------------------------------------------
- .\" * set default formatting
- .\" -----------------------------------------------------------------
- .\" disable hyphenation
- .nh
- .\" disable justification (adjust text to left margin only)
- .ad l
- .\" -----------------------------------------------------------------
- .\" * MAIN CONTENT STARTS HERE *
- .\" -----------------------------------------------------------------
- .SH "NAME"
- ne_sock_init, ne_sock_exit \- perform library initialization
- .SH "SYNOPSIS"
- .sp
- .ft B
- .nf
- #include <ne_socket\&.h>
- .fi
- .ft
- .HP \w'int\ ne_sock_init('u
- .BI "int ne_sock_init(void);"
- .HP \w'void\ ne_sock_exit('u
- .BI "void ne_sock_exit(void);"
- .SH "DESCRIPTION"
- .PP
- In some platforms and configurations, neon may be using some socket or SSL libraries which require global initialization before use\&. To perform this initialization, the
- \fBne_sock_init\fR
- function must be called before any other library functions are used\&.
- .PP
- Once all use of neon is complete,
- \fBne_sock_exit\fR
- can be called to perform de\-initialization of socket or SSL libraries, if necessary\&. Uses of
- \fBne_sock_init\fR
- and
- \fBne_sock_exit\fR
- are "reference counted"; if N calls to
- \fBne_sock_init\fR
- are made, only the Nth call to
- \fBne_sock_exit\fR
- will have effect\&.
- .PP
- \fBne_sock_init\fR
- will set the disposition of the
- SIGPIPE
- signal to
- \fIignored\fR\&. No change is made to the
- SIGPIPE
- disposition by
- \fBne_sock_exit\fR\&.
- .PP
- Both the SSL libraries supported by neon \(em OpenSSL and GnuTLS \(em require callbacks to be registered to allow thread\-safe use of SSL\&. These callbacks are stored as global variables and so their state persists for as long as the library in question is loaded into the process\&. If multiple users of the SSL library exist within the process, this can be problematic, particularly if one is dynamically loaded (and may subsequently be unloaded)\&.
- .PP
- If neon is configured using the
- \-\-enable\-threadsafe\-ssl
- flag, thread\-safe SSL support will be enabled automatically, as covered in the following section\&. Otherwise, it is not safe to use neon with SSL in a multi\-threaded process\&. The
- ne_has_support
- function can be used to determine whether neon is built to enable thread\-safety support in the SSL library\&.
- .SS "Thread\-safe SSL with OpenSSL"
- .PP
- neon follows two simple rules when dealing with the OpenSSL locking callbacks:
- .sp
- .RS 4
- .ie n \{\
- \h'-04'\(bu\h'+03'\c
- .\}
- .el \{\
- .sp -1
- .IP \(bu 2.3
- .\}
- \fBne_sock_init\fR
- will set thread\-safety locking callbacks if and only if no locking callbacks are already registered\&.
- .RE
- .sp
- .RS 4
- .ie n \{\
- \h'-04'\(bu\h'+03'\c
- .\}
- .el \{\
- .sp -1
- .IP \(bu 2.3
- .\}
- \fBne_sock_exit\fR
- will unset the thread\-safety locking callbacks if and only if the locking callbacks registered are those registered by
- \fBne_sock_init\fR\&.
- .RE
- .sp
- Applications and libraries should be able to co\-operate to ensure that SSL use is always thread\-safe if similar rules are always followed\&.
- .SS "Thread\-safe SSL with GnuTLS"
- .PP
- The cryptography library used by GnuTLS, libgcrypt, only supports an initialization operation to register thread\-safety callbacks\&.
- \fBne_sock_init\fR
- will register the thread\-safe locking callbacks on first use;
- \fBne_sock_exit\fR
- cannot unregister them\&. If multiple users of GnuTLS are present within the process, it is unsafe to dynamically unload neon from the process if neon is configured with thread\-safe SSL support enabled (since the callbacks would be left pointing at unmapped memory once neon is unloaded)\&.
- .SH "RETURN VALUE"
- .PP
- \fBne_sock_init\fR
- returns zero on success, or non\-zero on error\&. If an error occurs, no further use of the neon library should be attempted\&.
- .SH "SEE ALSO"
- .PP
- neon(3),
- ne_has_support(3)
- .SH "AUTHOR"
- .PP
- \fBJoe Orton\fR <\&[email protected]\&>
- .RS 4
- Author.
- .RE
- .SH "COPYRIGHT"
- .br
|