From 7dcc185c32066e616d8f08321924e5b40a29db68 Mon Sep 17 00:00:00 2001 From: Krzosa Karol Date: Tue, 27 Jan 2026 09:03:34 +0100 Subject: [PATCH] Basic server, needs to be tested, now need to write client code --- src/main.cpp | 33 +++++++++++++++++++++++++++++---- 1 file changed, 29 insertions(+), 4 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index c08341a..668f710 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,6 +1,6 @@ /* -- [ ] Setup so that both client and server are in one program? - - [ ] I would like to make it nicely visible in debugger, I don't want to switch etc. +- [ ] Create threads and put client code, server code on separate +- [ ] Create client code */ #define WIN32_LEAN_AND_MEAN @@ -173,10 +173,9 @@ void serialize_addrinfo(struct addrinfo* in) { } } - #define PORT "8000" -int main() { +void run_server() { WSADATA wsaData; int err_wsa_startup = WSAStartup(MAKEWORD(2, 2), &wsaData); @@ -236,6 +235,32 @@ int main() { debugf("waiting for connections..."); + sockaddr_storage their_addr = {}; + while (1) { + int their_addrlen = sizeof(their_addr); + SOCKET conn_sock = accept(socket_fd, (sockaddr *)&their_addr, &their_addrlen); + if (conn_sock == -1) { + debugf("failed to accept connection %s", serialize_error_code(WSAGetLastError())); + continue; + } + defer { closesocket(conn_sock); }; + + // @todo: this might be a little wrong, also the win32 and unix seem to differ on field names in sockaddr + char s[INET6_ADDRSTRLEN]; + sockaddr *n = (sockaddr *)&their_addr; + inet_ntop(their_addr.ss_family, n->sa_data, s, sizeof(s)); + debugf("server: got connection from: %s", s); + + const char *msg = "Hello world"; + int send_err_code = send(conn_sock, msg, (int)strlen(msg), 0); + if (send_err_code == -1) { + debugf("failed to send message %s", serialize_error_code(WSAGetLastError())); + } + } +} + +int main() { + run_server(); debugf("exiting..."); return 0; }