2
0
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:
Tatuya JINMEI 神明達哉
2008-08-20 23:57:59 +00:00
parent 0cb666ecb4
commit 13d9b8ce94
7 changed files with 90 additions and 17 deletions

View File

@@ -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) {