diff options
author | Norbert Preining <norbert@preining.info> | 2020-10-12 03:04:00 +0000 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2020-10-12 03:04:00 +0000 |
commit | 0ce40abb18ec02ec6fd6bcc5f21612c88daa7578 (patch) | |
tree | 416289fe1448873fd8ca33051f50ad85bffa8aaa /support/dktools/dk4sock31.c | |
parent | fdb18507cd80dc17f5a5256153d34668b4f4e61c (diff) |
CTAN sync 202010120303
Diffstat (limited to 'support/dktools/dk4sock31.c')
-rw-r--r-- | support/dktools/dk4sock31.c | 349 |
1 files changed, 0 insertions, 349 deletions
diff --git a/support/dktools/dk4sock31.c b/support/dktools/dk4sock31.c deleted file mode 100644 index c82018707f..0000000000 --- a/support/dktools/dk4sock31.c +++ /dev/null @@ -1,349 +0,0 @@ -/* -Copyright (C) 2016-2020, Dirk Krause -SPDX-License-Identifier: BSD-3-Clause -*/ - -/* - WARNING: This file was generated by the dkct program (see - http://dktools.sourceforge.net/ for details). - Changes you make here will be lost if dkct is run again! - You should modify the original source and run dkct on it. - Original source: dk4sock31.ctr -*/ - -/** @file dk4sock31.c The dk4sock31 module. -*/ - - -#line 10 "dk4sock31.ctr" - - - -#include "dk4conf.h" -#include "dk4sock.h" -#include "dk4mem.h" - -#if DK4_HAVE_GETADDRINFO -#include "dk4maowd.h" -#else -#include "dk4maiwdus.h" -#endif - -#include "dk4rec24.h" - -#if DK4_HAVE_ASSERT_H -#ifndef ASSERT_H_INCLUDED -#include <assert.h> -#define ASSERT_H_INCLUDED 1 -#endif -#endif - - - - -#line 34 "dk4sock31.ctr" - - - -#if DK4_CHAR_SIZE > 1 -#if DK4_ON_WINDOWS - -/* +++++ +wchar_t +Windows */ - -/** Create UDP socket set for a local port number. - @param servicename Local service name. - @param local Flag: Allow local connections only. - @param broadcast Flag: Prepare for broadcast operations. - @param numeric Flag: Service name is numeric. - @param erp Error report, may be NULL. - @return Socket set on success, NULL on error. -*/ -static -dk4_socket_set_t * -dk4socket_wc_set_udp_num_flag( - const wchar_t *servicename, - int local, - int broadcast, - int numeric, - dk4_er_t *erp -) -{ -#if DK4_HAVE_GETADDRINFO - /* +++++ +getaddrinfo */ - ADDRINFOW hints; - ADDRINFOW *addri = NULL; - ADDRINFOW *paddr = NULL; - dk4_socket_set_t *back = NULL; - size_t numad = 0; - int res = 0; -#if DK4_HAVE_SETSOCKOPT && (defined(SO_REUSEPORT) || defined(SO_REUSEADDR)) - int opt = 0; -#endif -#if DK4_USE_ASSERT - assert(NULL != servicename); -#endif - if (NULL != servicename) { - DK4_MEMRES(&hints, sizeof(hints)); - hints.ai_family = AF_UNSPEC; - hints.ai_socktype = SOCK_STREAM; - hints.ai_flags = 0; - hints.ai_protocol = 0; - hints.ai_addrlen = 0; - hints.ai_canonname = NULL; - hints.ai_addr = NULL; - hints.ai_next = NULL; - if (0 == local) { hints.ai_flags |= AI_PASSIVE; } - if (0 != numeric) { hints.ai_flags |= AI_NUMERICSERV; } - res = GetAddrInfoW(NULL, servicename, &hints, &addri); - if ((0 == res) && (NULL != addri)) { - paddr = addri; - while (NULL != paddr) { numad++; paddr = paddr->ai_next; } - if (0 < numad) { - paddr = addri; - back = dk4socket_set_new(numad, erp); - if (NULL != back) { - while (NULL != paddr) { - (back->pSockets)[back->szUsed] = dk4socket_open( - paddr->ai_family, SOCK_STREAM, 0, erp - ); - if (INVALID_SOCKET != (back->pSockets)[back->szUsed]) { -#if DK4_HAVE_SETSOCKOPT && defined(SO_REUSEPORT) - - -#line 101 "dk4sock31.ctr" - dk4socket_set_one_bytes(&opt, sizeof(opt)); - res = setsockopt( - (back->pSockets)[back->szUsed], SOL_SOCKET, - SO_REUSEPORT, (void *)(&opt), sizeof(opt) - ); - if (0 != res) { - -#line 107 "dk4sock31.ctr" - } -#else -#if DK4_HAVE_SETSOCKOPT && defined(SO_REUSEADDR) - - -#line 111 "dk4sock31.ctr" - dk4socket_set_one_bytes(&opt, sizeof(opt)); - res = setsockopt( - (back->pSockets)[back->szUsed], SOL_SOCKET, - SO_REUSEADDR, (void *)(&opt), sizeof(opt) - ); - if (0 != res) { - -#line 117 "dk4sock31.ctr" - } -#else - - -#line 120 "dk4sock31.ctr" -#endif -#endif -#if DK4_HAVE_SETSOCKOPT && defined(SO_BROADCAST) - - -#line 124 "dk4sock31.ctr" - if (0 != broadcast) { - dk4socket_set_one_bytes(&opt, sizeof(opt)); - res = setsockopt( - (back->pSockets)[back->szUsed], SOL_SOCKET, - SO_BROADCAST, (void *)(&opt), sizeof(opt) - ); - if (0 != res) { - -#line 131 "dk4sock31.ctr" - } - } -#else - - -#line 135 "dk4sock31.ctr" -#endif - res = dk4socket_bind( - (back->pSockets)[back->szUsed], paddr->ai_addr, - paddr->ai_addrlen, erp - ); - if (DK4_SOCKET_RESULT_SUCCESS == res) { - back->szUsed += 1; - } else { - (void)dk4socket_close((back->pSockets)[back->szUsed], NULL); - (back->pSockets)[back->szUsed] = INVALID_SOCKET; - } - } - paddr = paddr->ai_next; - } - if (0 == back->szUsed) { - dk4socket_set_delete(back, NULL); - back = NULL; - } - } - } - FreeAddrInfoW(addri); - } else { - dk4error_set_idetails(erp, DK4_E_SOCKET_GETADDRLOC, res); - } - } else { - dk4error_set_simple_error_code(erp, DK4_E_INVALID_ARGUMENTS); - } - return back; - /* ----- +getaddrinfo */ -#else - /* +++++ -getaddrinfo */ - char asvcn[128]; - const wchar_t *endptr = NULL; - dk4_socket_set_t *back = NULL; - struct servent *serv = NULL; - int iport = 0; - int res = 0; - unsigned short portno = 0; -#if DK4_USE_ASSERT - assert(NULL != servicename); -#endif - if (NULL != servicename) { - res = dk4ma_input_wc_dec_ushort( - &portno, servicename, &endptr, 1, erp - ); - if (0 != res) { - back = dk4socket_set_udp_directly(portno, local, broadcast, erp); - } else { - res = dk4recode_wchar_t_to_char(asvcn, sizeof(asvcn), servicename, erp); - if (0 != res) { - serv = getservbyname(asvcn, NULL); - if (NULL != serv) { - iport = serv->s_port; - dk4socket_swap_bytes_if_not_bigendian((void *)(&iport),sizeof(iport)); - portno = (unsigned short)iport; - back = dk4socket_set_udp_directly(portno, local, broadcast, erp); - } else { - dk4socket_error_report(erp, DK4_E_SOCKET_GETSERVBYNAME); - } - } - } - } else { - dk4error_set_simple_error_code(erp, DK4_E_INVALID_ARGUMENTS); - } - return back; - /* ----- -getaddrinfo */ -#endif -} - - - -static -dk4_socket_set_t * -dk4socket_wc_set_udp( - unsigned short portno, - int local, - int broadcast, - dk4_er_t *erp -) -{ -#if DK4_HAVE_GETADDRINFO - /* +++++ +getaddrinfo */ - wchar_t pnb[16*sizeof(dk4_um_t)]; - dk4_socket_set_t *back = NULL; - int res; -#if DK4_USE_ASSERT - assert(0 < portno); -#endif - if (0 < portno) { - res = dk4ma_write_wc_decimal_unsigned( - pnb, DK4_SIZEOF(pnb,wchar_t), (dk4_um_t)portno, 0, erp - ); - if (0 != res) { - back = dk4socket_wc_set_udp_num_flag( - pnb, local, broadcast, 1, erp - ); - } - } else { - dk4error_set_simple_error_code(erp, DK4_E_INVALID_ARGUMENTS); - } - return back; - /* ----- +getaddrinfo */ -#else - /* +++++ -getaddrinfo */ - return ( - dk4socket_set_udp_directly(portno, local, broadcast, erp) - ); - /* ----- -getaddrinfo */ -#endif -} - - - -static -dk4_socket_set_t * -dk4socket_wc_set_udp_service( - const wchar_t *servicename, - int local, - int broadcast, - dk4_er_t *erp -) -{ -#if DK4_USE_ASSERT - assert(NULL != servicename); -#endif - return ( - dk4socket_wc_set_udp_num_flag(servicename, local, broadcast, 0, erp) - ); -} - -/* ----- +wchar_t +Windows */ - -#else -#error No networking functions using wchar_t host and service names available! -#endif -#endif - - - - -dk4_socket_set_t * -dk4socket_set_udp( - unsigned short portno, - int local, - int broadcast, - dk4_er_t *erp -) -{ -#if DK4_USE_ASSERT - assert(0 < portno); -#endif -#if DK4_CHAR_SIZE > 1 - return ( - dk4socket_wc_set_udp(portno, local, broadcast, erp) - ); -#else - return ( - dk4socket_c8_set_udp(portno, local, broadcast, erp) - ); -#endif -} - - - -dk4_socket_set_t * -dk4socket_set_udp_service( - const dkChar *servicename, - int local, - int broadcast, - dk4_er_t *erp -) -{ -#if DK4_USE_ASSERT - assert(NULL != servicename); -#endif -#if DK4_CHAR_SIZE > 1 - return ( - dk4socket_wc_set_udp_service(servicename, local, broadcast, erp) - ); -#else - return ( - dk4socket_c8_set_udp_service(servicename, local, broadcast, erp) - ); -#endif -} - - - |