TcpServer/TcpReactor Framework
This commit is contained in:
@@ -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;
|
||||
}
|
||||
Reference in New Issue
Block a user