UTI_SetQuitSignalsHandler(signal_handler, 0);
- SCK_Initialise();
+ SCK_Initialise(IPADDR_UNSPEC);
server_addresses = get_addresses(hostnames, port);
if (!open_io())
case IPADDR_INET4:
case IPADDR_INET6:
port = CNF_GetCommandPort();
- if (port == 0 || !SCK_IsFamilySupported(family))
+ if (port == 0 || !SCK_IsIpFamilyEnabled(family))
return INVALID_SOCK_FD;
CNF_GetBindCommandAddress(family, &local_addr.ip_addr);
/* ================================================== */
void
-CAM_Initialise(int family)
+CAM_Initialise(void)
{
assert(!initialised);
assert(sizeof (permissions) / sizeof (permissions[0]) == N_REQUEST_TYPES);
do_size_checks();
initialised = 1;
- sock_fdu = INVALID_SOCK_FD;
- sock_fd4 = INVALID_SOCK_FD;
- sock_fd6 = INVALID_SOCK_FD;
-
- if (family == IPADDR_UNSPEC || family == IPADDR_INET4)
- sock_fd4 = open_socket(IPADDR_INET4);
- if (family == IPADDR_UNSPEC || family == IPADDR_INET6)
- sock_fd6 = open_socket(IPADDR_INET6);
+ sock_fdu = INVALID_SOCK_FD;
+ sock_fd4 = open_socket(IPADDR_INET4);
+ sock_fd6 = open_socket(IPADDR_INET6);
access_auth_table = ADF_CreateTable();
}
#include "addressing.h"
-extern void CAM_Initialise(int family);
+extern void CAM_Initialise(void);
extern void CAM_Finalise(void);
SRC_Initialise();
RCL_Initialise();
KEY_Initialise();
- SCK_Initialise();
+ SCK_Initialise(address_family);
/* Open privileged ports before dropping root */
- CAM_Initialise(address_family);
- NIO_Initialise(address_family);
+ CAM_Initialise();
+ NIO_Initialise();
NCR_Initialise();
CNF_SetupAccessRestrictions();
int sock_fd, sock_flags, events = SCH_FILE_INPUT;
IPSockAddr local_addr;
- if (!SCK_IsFamilySupported(family))
+ if (!SCK_IsIpFamilyEnabled(family))
return INVALID_SOCK_FD;
if (!client_only)
/* ================================================== */
void
-NIO_Initialise(int family)
+NIO_Initialise(void)
{
int server_port, client_port;
server_sock_ref4 = 0;
server_sock_ref6 = 0;
- if (family == IPADDR_UNSPEC || family == IPADDR_INET4) {
- if (permanent_server_sockets && server_port)
- server_sock_fd4 = open_socket(IPADDR_INET4, server_port, 0, NULL);
- if (!separate_client_sockets) {
- if (client_port != server_port || !server_port)
- client_sock_fd4 = open_socket(IPADDR_INET4, client_port, 1, NULL);
- else
- client_sock_fd4 = server_sock_fd4;
- }
+ if (permanent_server_sockets && server_port) {
+ server_sock_fd4 = open_socket(IPADDR_INET4, server_port, 0, NULL);
+ server_sock_fd6 = open_socket(IPADDR_INET6, server_port, 0, NULL);
}
- if (family == IPADDR_UNSPEC || family == IPADDR_INET6) {
- if (permanent_server_sockets && server_port)
- server_sock_fd6 = open_socket(IPADDR_INET6, server_port, 0, NULL);
- if (!separate_client_sockets) {
- if (client_port != server_port || !server_port)
- client_sock_fd6 = open_socket(IPADDR_INET6, client_port, 1, NULL);
- else
- client_sock_fd6 = server_sock_fd6;
+ if (!separate_client_sockets) {
+ if (client_port != server_port || !server_port) {
+ client_sock_fd4 = open_socket(IPADDR_INET4, client_port, 1, NULL);
+ client_sock_fd6 = open_socket(IPADDR_INET6, client_port, 1, NULL);
+ } else {
+ client_sock_fd4 = server_sock_fd4;
+ client_sock_fd6 = server_sock_fd6;
}
}
#include "addressing.h"
/* Function to initialise the module. */
-extern void NIO_Initialise(int family);
+extern void NIO_Initialise(void);
/* Function to finalise the module */
extern void NIO_Finalise(void);
IPSockAddr local_addr;
int sock_fd;
- if (!SCK_IsFamilySupported(family))
+ if (!SCK_IsIpFamilyEnabled(family))
return INVALID_SOCK_FD;
CNF_GetBindAddress(family, &local_addr.ip_addr);
static int initialised;
+/* Flags indicating in which IP families sockets can be requested */
+static int ip4_enabled;
+static int ip6_enabled;
+
/* Flags supported by socket() */
static int supported_socket_flags;
switch (family) {
case IPADDR_INET4:
+ if (!ip4_enabled)
+ return INVALID_SOCK_FD;
domain = AF_INET;
break;
#ifdef FEAT_IPV6
case IPADDR_INET6:
+ if (!ip6_enabled)
+ return INVALID_SOCK_FD;
domain = AF_INET6;
break;
#endif
/* ================================================== */
void
-SCK_Initialise(void)
+SCK_Initialise(int family)
{
+ ip4_enabled = family == IPADDR_INET4 || family == IPADDR_UNSPEC;
+#ifdef FEAT_IPV6
+ ip6_enabled = family == IPADDR_INET6 || family == IPADDR_UNSPEC;
+#else
+ ip6_enabled = 0;
+#endif
+
recv_messages = ARR_CreateInstance(sizeof (struct Message));
ARR_SetSize(recv_messages, MAX_RECV_MESSAGES);
recv_headers = ARR_CreateInstance(sizeof (struct MessageHeader));
/* ================================================== */
int
-SCK_IsFamilySupported(int family)
+SCK_IsIpFamilyEnabled(int family)
{
switch (family) {
case IPADDR_INET4:
- return 1;
+ return ip4_enabled;
case IPADDR_INET6:
-#ifdef FEAT_IPV6
- return 1;
-#endif
+ return ip6_enabled;
default:
return 0;
}
int descriptor;
} SCK_Message;
-/* Initialisation function */
-extern void SCK_Initialise(void);
+/* Initialisation function (the specified IP family is enabled,
+ or all if IPADDR_UNSPEC) */
+extern void SCK_Initialise(int family);
/* Finalisation function */
extern void SCK_Finalise(void);
-/* Check if support for the IP family was enabled in the build */
-extern int SCK_IsFamilySupported(int family);
+/* Check if support for the IP family is enabled */
+extern int SCK_IsIpFamilyEnabled(int family);
/* Get the 0.0.0.0/::0 or 127.0.0.1/::1 address */
extern void SCK_GetAnyLocalIPAddress(int family, IPAddr *local_addr);
#ifndef FEAT_CMDMON
void
-CAM_Initialise(int family)
+CAM_Initialise(void)
{
}
}
void
-NIO_Initialise(int family)
+NIO_Initialise(void)
{
}
TST_RegisterDummyDrivers();
SCH_Initialise();
SRC_Initialise();
- NIO_Initialise(IPADDR_UNSPEC);
+ NIO_Initialise();
NCR_Initialise();
REF_Initialise();
LCL_Initialise();
SCH_Initialise();
SRC_Initialise();
- NIO_Initialise(IPADDR_UNSPEC);
+ NIO_Initialise();
NCR_Initialise();
NSR_Initialise();