QSC Post Quantum Cryptographic Library 1.3.0.0 (C1)
A post quantum secure library written in Ansi C
Loading...
Searching...
No Matches
socketserver.h
Go to the documentation of this file.
1/* 2020-2026 Quantum Resistant Cryptographic Solutions Corporation
2 * All Rights Reserved.
3 *
4 * NOTICE:
5 * This software and all accompanying materials are the exclusive property of
6 * Quantum Resistant Cryptographic Solutions Corporation (QRCS). The intellectual
7 * and technical concepts contained herein are proprietary to QRCS and are
8 * protected under applicable Canadian, U.S., and international copyright,
9 * patent, and trade secret laws.
10 *
11 * CRYPTOGRAPHIC ALGORITHMS AND IMPLEMENTATIONS:
12 * - This software includes implementations of cryptographic primitives and
13 * algorithms that are standardized or in the public domain, such as AES
14 * and SHA-3, which are not proprietary to QRCS.
15 * - This software also includes cryptographic primitives, constructions, and
16 * algorithms designed by QRCS, including but not limited to RCS, SCB, CSX, QMAC, and
17 * related components, which are proprietary to QRCS.
18 * - All source code, implementations, protocol compositions, optimizations,
19 * parameter selections, and engineering work contained in this software are
20 * original works of QRCS and are protected under this license.
21 *
22 * LICENSE AND USE RESTRICTIONS:
23 * - This software is licensed under the Quantum Resistant Cryptographic Solutions
24 * Public Research and Evaluation License (QRCS-PREL), 2025-2026.
25 * - Permission is granted solely for non-commercial evaluation, academic research,
26 * cryptographic analysis, interoperability testing, and feasibility assessment.
27 * - Commercial use, production deployment, commercial redistribution, or
28 * integration into products or services is strictly prohibited without a
29 * separate written license agreement executed with QRCS.
30 * - Licensing and authorized distribution are solely at the discretion of QRCS.
31 *
32 * EXPERIMENTAL CRYPTOGRAPHY NOTICE:
33 * Portions of this software may include experimental, novel, or evolving
34 * cryptographic designs. Use of this software is entirely at the user's risk.
35 *
36 * DISCLAIMER:
37 * THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
38 * IMPLIED, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS
39 * FOR A PARTICULAR PURPOSE, SECURITY, OR NON-INFRINGEMENT. QRCS DISCLAIMS ALL
40 * LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
41 * ARISING FROM THE USE OR MISUSE OF THIS SOFTWARE.
42 *
43 * FULL LICENSE:
44 * This software is subject to the Quantum Resistant Cryptographic Solutions
45 * Public Research and Evaluation License (QRCS-PREL), 2025-2026. The complete license terms
46 * are provided in the accompanying LICENSE file or at https://www.qrcscorp.ca.
47 *
48 * Written by: John G. Underhill
49 * Contact: contact@qrcscorp.ca
50 */
51
52#ifndef QSC_SOCKETSERVER_H
53#define QSC_SOCKETSERVER_H
54
55#include "qsccommon.h"
56#include "async.h"
57#include "socketbase.h"
58
59QSC_CPLUSPLUS_ENABLED_START
60
98
103#define QSC_SOCKET_SERVER_LISTEN_BACKLOG 128ULL
104
109#define QSC_SOCKET_SERVER_MAX_THREADS 1024ULL
110
111/*** Structures ***/
112
120
128typedef struct
129{
132 void (*error)(qsc_socket* sock, qsc_socket_exceptions exception);
133 volatile int32_t tcount;
134 qsc_mutex smutex;
136
137/*** Function Prototypes ***/
138
145
153
154/*** Accessors ***/
155
164
173
182
189
196
203
216QSC_EXPORT_API qsc_socket_exceptions qsc_socket_server_listen(qsc_socket* source, qsc_socket* target, const char* address, uint16_t port, qsc_socket_address_families family);
217
230
243
255
266
277
288
295
296QSC_CPLUSPLUS_ENABLED_END
297
298#endif
Asynchronous Thread and Mutex Management Functions.
Contains common definitions for the Quantum Secure Cryptographic (QSC) library.
#define QSC_EXPORT_API
API export macro for Microsoft compilers when importing from a DLL.
Definition qsccommon.h:645
Socket function definitions.
qsc_socket_exceptions
Socket code enumeration names.
Definition socketbase.h:115
qsc_socket_options
TCP socket options.
Definition socketflags.h:112
qsc_socket_transports
The socket transmission type.
Definition socketflags.h:207
qsc_socket_address_families
The socket address family type.
Definition socketflags.h:80
qsc_socket_protocols
The socket IP protocol type.
Definition socketflags.h:146
QSC_EXPORT_API qsc_socket_exceptions qsc_socket_server_listen_async(qsc_socket_server_async_accept_state *state, const char *address, uint16_t port, qsc_socket_address_families family)
Places the socket in an asynchronous listening state.
Definition socketserver.c:272
QSC_EXPORT_API qsc_socket_protocols qsc_socket_server_socket_protocol(const qsc_socket *sock)
Get the socket protocol type.
Definition socketserver.c:22
QSC_EXPORT_API qsc_socket_exceptions qsc_socket_server_listen_ipv4(qsc_socket *source, qsc_socket *target, const qsc_ipinfo_ipv4_address *address, uint16_t port)
Places the source IPv4 socket in a blocking listening state, and waits for a connection....
Definition socketserver.c:118
QSC_EXPORT_API void qsc_socket_server_set_options(const qsc_socket *sock, qsc_socket_protocols level, qsc_socket_options option, int32_t optval)
Send an option command to the socket. Options that use a boolean are format: 0=false,...
Definition socketserver.c:385
QSC_EXPORT_API qsc_socket_exceptions qsc_socket_server_listen_async_ipv6(qsc_socket_server_async_accept_state *state, const qsc_ipinfo_ipv6_address *address, uint16_t port)
Places the IPv6 socket in an asynchronous listening state.
Definition socketserver.c:343
QSC_EXPORT_API void qsc_socket_server_accept_callback(qsc_socket_server_accept_result *ares)
The socket server accept callback prototype.
QSC_EXPORT_API qsc_socket_exceptions qsc_socket_server_listen_ipv6(qsc_socket *source, qsc_socket *target, const qsc_ipinfo_ipv6_address *address, uint16_t port)
Places the source IPv6 socket in a blocking listening state, and waits for a connection....
Definition socketserver.c:153
QSC_EXPORT_API qsc_socket_exceptions qsc_socket_server_listen(qsc_socket *source, qsc_socket *target, const char *address, uint16_t port, qsc_socket_address_families family)
Places the source socket in a blocking listening state, and waits for a connection....
Definition socketserver.c:81
QSC_EXPORT_API qsc_socket_transports qsc_socket_server_socket_transport(const qsc_socket *sock)
Get the socket transport type.
Definition socketserver.c:38
QSC_EXPORT_API void qsc_socket_server_shut_down(qsc_socket *sock)
Shut down the server.
Definition socketserver.c:395
QSC_EXPORT_API void qsc_socket_server_initialize(qsc_socket *sock)
Initialize the server socket.
Definition socketserver.c:65
QSC_EXPORT_API void qsc_socket_server_close_socket(qsc_socket *sock)
Shut down channels and close the socket.
Definition socketserver.c:54
QSC_EXPORT_API qsc_socket_exceptions qsc_socket_server_listen_async_ipv4(qsc_socket_server_async_accept_state *state, const qsc_ipinfo_ipv4_address *address, uint16_t port)
Places the IPv4 socket in an asynchronous listening state.
Definition socketserver.c:310
QSC_EXPORT_API void qsc_socket_server_error_callback(const qsc_socket *source, qsc_socket_exceptions error)
The socket server error callback prototype.
QSC_EXPORT_API qsc_socket_address_families qsc_socket_server_address_family(const qsc_socket *sock)
Get the sockets address family, IPv4 or IPv6.
Definition socketserver.c:6
QSC_EXPORT_API void qsc_socket_server_async_dispose(qsc_socket_server_async_accept_state *state)
Releases the server mutex, disposes of the listener socket and state.
Definition socketserver.c:250
The IPv4 address structure.
Definition ipinfo.h:161
The IPv6 address structure.
Definition ipinfo.h:330
The async socket result structure.
Definition socketserver.h:117
qsc_socket target
Definition socketserver.h:118
The async listener-accept state structure. The structure contains a pointer to the listener socket,...
Definition socketserver.h:129
void(* callback)(qsc_socket_server_accept_result *result)
Definition socketserver.h:131
volatile int32_t tcount
Definition socketserver.h:133
qsc_mutex smutex
Definition socketserver.h:134
void(* error)(qsc_socket *sock, qsc_socket_exceptions exception)
Definition socketserver.h:132
qsc_socket * source
Definition socketserver.h:130
The socket instance structure.
Definition socket.h:133