TcpServer/TcpReactor Framework
This commit is contained in:
@@ -0,0 +1,85 @@
|
||||
#include "c_Socket.h"
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include "c_AddrInfo.h"
|
||||
#include "c_SockAddrUtil.h"
|
||||
#include "c_SocketUtil.h"
|
||||
|
||||
int main(int argc, char** argv){
|
||||
c_Socket_Init();
|
||||
|
||||
printf("Configuring local address...\n");
|
||||
|
||||
c_AddrInfo_t bindAddr;
|
||||
c_AddrInfo_Init(&bindAddr, AF_INET, SOCK_STREAM, AI_PASSIVE, 0, "8080");
|
||||
|
||||
|
||||
printf("Creating socket...\n");
|
||||
c_socket_t socket_listen = c_SocketUtil_CreateFromAddrInfo(&bindAddr);
|
||||
|
||||
if (!c_Socket_IsValid(socket_listen)) {
|
||||
fprintf(stderr, "socket() failed. (%d)\n", c_Socket_GetErrno());
|
||||
return 1;
|
||||
}
|
||||
|
||||
printf("Binding socket to local address...\n");
|
||||
if (c_SocketUtil_BindWithAddrInfo(socket_listen, &bindAddr) !=C_ERR_OK) {
|
||||
fprintf(stderr, "bind() failed. (%d)\n", c_Socket_GetErrno());
|
||||
return 1;
|
||||
}
|
||||
|
||||
c_AddrInfo_Destroy(&bindAddr);
|
||||
|
||||
|
||||
printf("Listening...\n");
|
||||
if (listen(socket_listen, 10) < 0) {
|
||||
fprintf(stderr, "listen() failed. (%d)\n", c_Socket_GetErrno());
|
||||
return 1;
|
||||
}
|
||||
|
||||
printf("Waiting for connection...\n");
|
||||
c_SockAddr_t client_address;
|
||||
c_socket_t socket_client = c_SocketUtil_Accept(socket_listen, &client_address);
|
||||
if (!c_Socket_IsValid(socket_client)) {
|
||||
fprintf(stderr, "accept() failed. (%d)\n", c_Socket_GetErrno());
|
||||
return 1;
|
||||
}
|
||||
|
||||
printf("Client is connected... ");
|
||||
char address_buffer[100];
|
||||
c_SocketUtil_GetNameInfoForSockAddr(&client_address, address_buffer, sizeof(address_buffer), 0, 0);
|
||||
printf("%s\n", address_buffer);
|
||||
|
||||
printf("Reading request...\n");
|
||||
char request[1024];
|
||||
int bytes_received = recv(socket_client, request, 1024, 0);
|
||||
printf("Received %d bytes.\n", bytes_received);
|
||||
|
||||
printf("Sending response...\n");
|
||||
const char *response =
|
||||
"HTTP/1.1 200 OK\r\n"
|
||||
"Connection: close\r\n"
|
||||
"Content-Type: text/plain\r\n\r\n"
|
||||
"Local time is: ";
|
||||
int bytes_sent = send(socket_client, response, strlen(response), 0);
|
||||
printf("Sent %d of %d bytes.\n", bytes_sent, (int)strlen(response));
|
||||
|
||||
time_t timer;
|
||||
time(&timer);
|
||||
char *time_msg = ctime(&timer);
|
||||
bytes_sent = send(socket_client, time_msg, strlen(time_msg), 0);
|
||||
printf("Sent %d of %d bytes.\n", bytes_sent, (int)strlen(time_msg));
|
||||
|
||||
printf("Closing connection...\n");
|
||||
c_Socket_Close(socket_client);
|
||||
|
||||
|
||||
printf("Closing listening socket...\n");
|
||||
c_Socket_Close(socket_listen);
|
||||
|
||||
c_Socket_Destroy();
|
||||
|
||||
printf("Finished.\n");
|
||||
|
||||
return 0;
|
||||
}
|
||||
Reference in New Issue
Block a user