Created
November 10, 2018 20:09
-
-
Save jnovikov/6844c7f2988c2f5a40dc90fdd17ddfd0 to your computer and use it in GitHub Desktop.
Easy one threaded tcp server c++ implementation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <cstdio> | |
#include <iostream> | |
#include <unistd.h> | |
#include <fcntl.h> | |
#include <sys/types.h> | |
#include <sys/socket.h> | |
#include <arpa/inet.h> | |
int main() { | |
int test = socket(AF_INET, SOCK_STREAM, 0); | |
if (test == -1) { | |
std::cout << "Failed to create socket" << std::endl; | |
return test; | |
} | |
struct sockaddr_in server_addr = {0}; | |
server_addr.sin_family = AF_INET; | |
server_addr.sin_addr.s_addr = htonl(INADDR_ANY); | |
server_addr.sin_port = htons(8002); | |
int enable = 1; | |
if (setsockopt(test, SOL_SOCKET, SO_REUSEADDR, &enable, sizeof(int)) < 0) { | |
std::cout << "Failed to set reuse option" << std::endl; | |
} | |
int err = bind(test, (struct sockaddr*)&server_addr, sizeof(server_addr)); | |
if (err == -1) { | |
std::cout << "Failed to bind on " << 8001 << std::endl; | |
return err; | |
} | |
int backlog = 100; | |
err = listen(test, backlog); | |
if (err == -1) { | |
std::cout << "Failed to listen on port " << std::endl; | |
return err; | |
} | |
std::cout << "Listen on port: " << 8001 << std::endl; | |
// Обработка и взятие из очереди 1 подключения ! | |
struct sockaddr_in client; | |
socklen_t client_len; | |
client_len = sizeof(client); | |
int client_sock = accept(test,(struct sockaddr*)&client, &client_len); | |
if (client_sock < 0) { | |
std::cout << "Accept failed" << std::endl; | |
// return ? | |
} | |
std::cout << "Accepted new connection: " << std::endl; | |
char c_request[50] = {0}; | |
read(client_sock, &c_request, 50); | |
std::string request(c_request); | |
std::cout << "Request" << request << std::endl; | |
reverse(request.begin(),request.end()); | |
const char* c_response = request.c_str(); | |
write(client_sock, c_response, strlen(c_response)); | |
if (close(client_sock) == -1) { | |
std::cout << "Close error " << std::endl; | |
} | |
if (close(test) == -1) { | |
std::cout << "Close rror " << std::endl; | |
} | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment