#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; }