TcpServer/TcpReactor Framework

This commit is contained in:
2026-09-08 10:35:16 +08:00
parent 4711ab6603
commit ac4045a979
23 changed files with 1831 additions and 20 deletions
+47
View File
@@ -0,0 +1,47 @@
#include "c_TcpSelectReactor.h"
#include "c_Test.h"
#include "c_TcpServer.h"
static void OnSelectClientConnected(c_socket_t client_sock, const c_SockAddr_t* peer_addr, void* args) {
(void)args;
char ip_str[64];
if (c_SockAddr_ToString(peer_addr, ip_str, sizeof(ip_str)) == C_SUCCESS) {
printf(" " COLOR_GREEN "[SELECT EVENT] Connection Intercepted: %s:%d" COLOR_RESET "\n",
ip_str, (int)c_SockAddr_GetPort(peer_addr));
}
c_Socket_Close(client_sock);
}
TEST_CASE(test_select_reactor_server_lifecycle) {
c_Socket_Init();
c_TcpServer_t server;
/* Initialize an unweighted IPv4 TCP Stream Server on Port 8585 */
c_err_t err = c_TcpServer_Init(&server, AF_INET, 8585, 512, NULL);
ASSERT_INT_EQ(C_SUCCESS, err);
/* 1. Instantiate the select driver backend */
c_TcpReactor_t* select_backend = NULL;
err = c_TcpSelectReactor_Create(&select_backend, 0);
ASSERT_INT_EQ(C_SUCCESS, err);
/* 2. Bind the driver onto the polymorphic loop interface */
err = c_TcpServer_SetReactor(&server, select_backend);
ASSERT_INT_EQ(C_SUCCESS, err);
/* 3. Execute a fast non-blocking single-pass polling check (10ms timeout) */
err = c_TcpServer_Run(&server, 60000, OnSelectClientConnected, NULL);
ASSERT_INT_EQ(C_SUCCESS, err);
/* 4. Complete teardown */
c_TcpServer_Destroy(&server);
c_Socket_Destroy();
}
int main(void) {
TEST_START(TcpServer_SelectReactor_Suite);
RUN_TEST(test_select_reactor_server_lifecycle);
TEST_REPORT();
RETURN_TEST_STATUS;
}