untested code pt 2
This commit is contained in:
parent
eee382cae9
commit
376378ee2b
1 changed files with 55 additions and 47 deletions
102
main.cpp
102
main.cpp
|
|
@ -11,6 +11,7 @@
|
|||
#include <signal.h>
|
||||
#include <unistd.h>
|
||||
#include <cstdlib>
|
||||
#include <thread>
|
||||
|
||||
using Db = std::vector<std::vector<std::string>>;
|
||||
Db database;
|
||||
|
|
@ -68,53 +69,7 @@ void safe_exit(int signum) {
|
|||
exit(signum);
|
||||
}
|
||||
|
||||
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::cout << "[i] Client connected." << std::endl;
|
||||
void handle_client(int client_socket) {
|
||||
while (true) {
|
||||
char buffer[4096];
|
||||
int bytes_received = recv(client_socket, buffer, 4096, 0);
|
||||
|
|
@ -167,6 +122,59 @@ int main() {
|
|||
}
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue