mirror of
https://gitlab.isc.org/isc-projects/bind9
synced 2025-09-05 00:55:24 +00:00
2420. [func] Add new command line option '-S' for named to specify
the max number of sockets. [RT #18493] Use caution: this option may not work for some operating systems without rebuilding named.
This commit is contained in:
@@ -15,7 +15,7 @@
|
||||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: socket.c,v 1.300 2008/08/20 06:16:05 marka Exp $ */
|
||||
/* $Id: socket.c,v 1.301 2008/08/20 23:57:59 jinmei Exp $ */
|
||||
|
||||
/*! \file */
|
||||
|
||||
@@ -140,16 +140,14 @@ struct isc_socketwait {
|
||||
|
||||
#ifdef USE_SELECT
|
||||
/*%
|
||||
* Mac OS X needs a special definition to support larger values in select()
|
||||
* Mac OS X needs a special definition to support larger values in select().
|
||||
* We always define this because a larger value can be specified run-time.
|
||||
*/
|
||||
#if ISC_SOCKET_MAXSOCKETS > FD_SETSIZE
|
||||
#ifdef __APPLE__
|
||||
#define _DARWIN_UNLIMITED_SELECT
|
||||
#endif /* __APPLE__ */
|
||||
#endif /* ISC_SOCKET_MAXSOCKETS > FD_SETSIZE */
|
||||
#endif /* USE_SELECT */
|
||||
|
||||
|
||||
/*%
|
||||
* Size of per-FD lock buckets.
|
||||
*/
|
||||
@@ -3475,6 +3473,13 @@ cleanup_watcher(isc_mem_t *mctx, isc_socketmgr_t *manager) {
|
||||
|
||||
isc_result_t
|
||||
isc_socketmgr_create(isc_mem_t *mctx, isc_socketmgr_t **managerp) {
|
||||
return (isc_socketmgr_create2(mctx, managerp, 0));
|
||||
}
|
||||
|
||||
isc_result_t
|
||||
isc_socketmgr_create2(isc_mem_t *mctx, isc_socketmgr_t **managerp,
|
||||
unsigned int maxsocks)
|
||||
{
|
||||
int i;
|
||||
isc_socketmgr_t *manager;
|
||||
#ifdef ISC_PLATFORM_USETHREADS
|
||||
@@ -3486,19 +3491,26 @@ isc_socketmgr_create(isc_mem_t *mctx, isc_socketmgr_t **managerp) {
|
||||
|
||||
#ifndef ISC_PLATFORM_USETHREADS
|
||||
if (socketmgr != NULL) {
|
||||
/* Don't allow maxsocks to be updated */
|
||||
if (maxsocks > 0 && socketmgr->maxsocks != maxsocks)
|
||||
return (ISC_R_EXISTS);
|
||||
|
||||
socketmgr->refs++;
|
||||
*managerp = socketmgr;
|
||||
return (ISC_R_SUCCESS);
|
||||
}
|
||||
#endif /* ISC_PLATFORM_USETHREADS */
|
||||
|
||||
if (maxsocks == 0)
|
||||
maxsocks = ISC_SOCKET_MAXSOCKETS;
|
||||
|
||||
manager = isc_mem_get(mctx, sizeof(*manager));
|
||||
if (manager == NULL)
|
||||
return (ISC_R_NOMEMORY);
|
||||
|
||||
/* zero-clear so that necessary cleanup on failure will be easy */
|
||||
memset(manager, 0, sizeof(*manager));
|
||||
manager->maxsocks = ISC_SOCKET_MAXSOCKETS;
|
||||
manager->maxsocks = maxsocks;
|
||||
manager->fds = isc_mem_get(mctx,
|
||||
manager->maxsocks * sizeof(isc_socket_t *));
|
||||
if (manager->fds == NULL) {
|
||||
|
Reference in New Issue
Block a user