untested code pt 2

This commit is contained in:
Xory 2025-10-07 21:09:09 +03:00
parent eee382cae9
commit 376378ee2b

102
main.cpp
View file

@ -11,6 +11,7 @@
#include <signal.h> #include <signal.h>
#include <unistd.h> #include <unistd.h>
#include <cstdlib> #include <cstdlib>
#include <thread>
using Db = std::vector<std::vector<std::string>>; using Db = std::vector<std::vector<std::string>>;
Db database; Db database;
@ -68,53 +69,7 @@ void safe_exit(int signum) {
exit(signum); exit(signum);
} }
int main() { void handle_client(int client_socket) {
std::cout << "[i] Starting blueis server..." << std::endl;
signal(SIGINT, safe_exit);
load_database("db.json");
int listening_socket = socket(AF_INET, SOCK_STREAM, 0 );
if (listening_socket < 0) {
std::cerr << "[E] Failed to create socket." << std::endl;
return 1;
}
int optval = 1;
if (setsockopt(listening_socket, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof(optval)) < 0) {
std::cerr << "[W] Failed to use SO_REUSEADDR. Continuing." << std::endl;
}
sockaddr_in server_address;
server_address.sin_family = AF_INET;
server_address.sin_port = htons(6379);
server_address.sin_addr.s_addr = INADDR_ANY;
if (bind(listening_socket, (sockaddr*)&server_address, sizeof(server_address)) < 0) {
std::cerr << "[E] Failed to bind to port 6379. Check for any other running redis or blueis instances." << std::endl;
close(listening_socket);
return 1;
}
if (listen(listening_socket, 5) < 0) {
std::cerr << "[E] Failed to listen on socket." << std::endl;
close(listening_socket);
return 1;
}
std::cout << "[i] Server listening on port 6379..." << std::endl;
sockaddr_in client_address;
socklen_t client_size = sizeof(client_address);
while (true) {
int client_socket = accept(listening_socket, (sockaddr*)&client_address, &client_size);
if (client_socket < 0) {
std::cerr << "[E] Failed to accept connection." << std::endl;
close(listening_socket);
return 1;
}
std::cout << "[i] Client connected." << std::endl;
while (true) { while (true) {
char buffer[4096]; char buffer[4096];
int bytes_received = recv(client_socket, buffer, 4096, 0); int bytes_received = recv(client_socket, buffer, 4096, 0);
@ -165,6 +120,59 @@ int main() {
break; break;
} }
} }
}
int main() {
std::cout << "[i] Starting blueis server..." << std::endl;
signal(SIGINT, safe_exit);
load_database("db.json");
int listening_socket = socket(AF_INET, SOCK_STREAM, 0 );
if (listening_socket < 0) {
std::cerr << "[E] Failed to create socket." << std::endl;
return 1;
}
int optval = 1;
if (setsockopt(listening_socket, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof(optval)) < 0) {
std::cerr << "[W] Failed to use SO_REUSEADDR. Continuing." << std::endl;
}
sockaddr_in server_address;
server_address.sin_family = AF_INET;
server_address.sin_port = htons(6379);
server_address.sin_addr.s_addr = INADDR_ANY;
if (bind(listening_socket, (sockaddr*)&server_address, sizeof(server_address)) < 0) {
std::cerr << "[E] Failed to bind to port 6379. Check for any other running redis or blueis instances." << std::endl;
close(listening_socket);
return 1;
}
if (listen(listening_socket, 5) < 0) {
std::cerr << "[E] Failed to listen on socket." << std::endl;
close(listening_socket);
return 1;
}
std::cout << "[i] Server listening on port 6379..." << std::endl;
sockaddr_in client_address;
socklen_t client_size = sizeof(client_address);
while (true) {
int client_socket = accept(listening_socket, (sockaddr*)&client_address, &client_size);
if (client_socket < 0) {
std::cerr << "[E] Failed to accept connection." << std::endl;
close(listening_socket);
return 1;
}
std::thread t(handle_client, client_socket); // Temporarily using the shit method of one thread per client despite the DoS potential until I can get async down.
if (t.joinable()) {
t.detach();
}
std::cout << "[i] Client connected." << std::endl;
} }