Spaces:
Running
Running
.\" | |
.\" Copyright 1998 by the Massachusetts Institute of Technology. | |
.\" Copyright (C) 2004-2009 by Daniel Stenberg | |
.\" | |
.\" Permission to use, copy, modify, and distribute this | |
.\" software and its documentation for any purpose and without | |
.\" fee is hereby granted, provided that the above copyright | |
.\" notice appear in all copies and that both that copyright | |
.\" notice and this permission notice appear in supporting | |
.\" documentation, and that the name of M.I.T. not be used in | |
.\" advertising or publicity pertaining to distribution of the | |
.\" software without specific, written prior permission. | |
.\" M.I.T. makes no representations about the suitability of | |
.\" this software for any purpose. It is provided "as is" | |
.\" without express or implied warranty. | |
.\" | |
.TH ARES_LIBRARY_INIT 3 "19 May 2009" | |
.SH NAME | |
ares_library_init \- c-ares library initialization | |
.SH SYNOPSIS | |
.nf | |
#include <ares.h> | |
int ares_library_init(int \fIflags\fP) | |
int ares_library_init_mem(int \fIflags\fP, | |
void *(*\fIamalloc\fP)(size_t), | |
void (*\fIafree\fP)(void *ptr), | |
void (*\fIarealloc\fP)(void *ptr, size_t size)) | |
.fi | |
.SH DESCRIPTION | |
.PP | |
The | |
.B ares_library_init | |
function performs initializations internally required by the c-ares | |
library that must take place before any other function provided by | |
c-ares can be used in a program. | |
.PP | |
This function must be called at least once within the life of a program, | |
before the program actually executes any other c-ares library function. | |
Initializations done by this function remain effective until a number of | |
calls to \fIares_library_cleanup(3)\fP equal to the number of calls to | |
this function are performed. | |
.PP | |
Successive calls to this function do nothing further, only the first | |
call done when c-ares is in an uninitialized state is actually | |
effective. | |
.PP | |
The | |
.I flags | |
parameter is a bit pattern that tells c-ares exactly which features | |
should be initialized, as described below. Set the desired bits by | |
ORing the values together. In normal operation you should specify | |
\fIARES_LIB_INIT_ALL\fP. Don't use any other value unless you are | |
familiar with it and trying to control some internal c-ares feature. | |
.PP | |
The | |
.B ares_library_init_mem | |
function allows the caller to provide memory management functions that the | |
c-ares library will be use instead of \fImalloc(3)\fP, \fIfree(3)\fP and | |
\fIrealloc(3)\fP. | |
.PP | |
.B This function is not thread safe. | |
You have to call it once the program has started, but this call must be done | |
before the program starts any other thread. This is required to avoid | |
potential race conditions in library initialization, and also due to the fact | |
that \fIares_library_init(3)\fP might call functions from other libraries that | |
are thread unsafe, and could conflict with any other thread that is already | |
using these other libraries. | |
.PP | |
On Windows platforms, the library user should ensure that \fIWSAStartup()\fP | |
is called before the c-ares library is initialized and used. | |
.PP | |
Win32/64 application DLLs shall not call \fIares_library_init(3)\fP from the | |
DllMain function. Doing so will produce deadlocks and other problems. | |
.SH FLAGS | |
.TP 5 | |
.B ARES_LIB_INIT_ALL | |
Initialize everything possible. This sets all known bits. | |
.TP | |
.B ARES_LIB_INIT_WIN32 | |
Initialize Win32/64 specific libraries. As of c-ares 1.19.0, this is ignored | |
as there are no currently dynamically loaded libraries. | |
.TP | |
.B ARES_LIB_INIT_NONE | |
Initialize nothing extra. This sets no bit. | |
.SH RETURN VALUE | |
Upon successful completion, ares_library_init() will return 0. Otherwise, a | |
non-zero error number will be returned to indicate the error. Except for | |
\fIares_strerror(3)\fP, you shall not call any other c-ares function upon | |
\fIares_library_init(3)\fP failure. | |
.SH AVAILABILITY | |
This function was first introduced in c-ares version 1.7.0 along with the | |
definition of preprocessor symbol \fICARES_HAVE_ARES_LIBRARY_INIT\fP as an | |
indication of the availability of this function. Its recursive behavior, | |
which requires a matching number of calls to \fIares_library_cleanup()\fP | |
in order to deinitialize the library, is present since c-ares version | |
1.10.0. Earlier versions would deinitialize the library on the first call | |
to \fIares_library_cleanup()\fP. | |
.PP | |
Since the introduction of this function it is absolutely mandatory to | |
call it for any Win32/64 program using c-ares. | |
.PP | |
Non-Win32/64 systems can still use c-ares version 1.7.0 without calling | |
\fIares_library_init(3)\fP due to the fact that \fIcurrently\fP it is nearly | |
a do-nothing function on non-Win32/64 platforms at this point. | |
.SH SEE ALSO | |
.BR ares_library_cleanup(3), | |
.BR ares_strerror(3) | |
.SH AUTHOR | |
Yang Tse | |
.PP | |
Copyright 1998 by the Massachusetts Institute of Technology. | |
.br | |
Copyright (C) 2004-2009 by Daniel Stenberg. | |