|
1 | | -@@ -1,56 +0,0 @@ |
2 | | --#include <iostream> |
3 | | --#include <cstdlib> |
4 | | --#include <string> |
5 | | --#include <cstring> |
6 | | --#include <unistd.h> |
7 | | --#include <sys/types.h> |
8 | | --#include <sys/socket.h> |
9 | | --#include <arpa/inet.h> |
10 | | --#include <netdb.h> |
11 | | -- |
12 | | --int main(int argc, char **argv) { |
13 | | -- // Flush after every std::cout / std::cerr |
14 | | -- std::cout << std::unitbuf; |
15 | | -- std::cerr << std::unitbuf; |
16 | | -- |
17 | | -- int server_fd = socket(AF_INET, SOCK_STREAM, 0); |
18 | | -- if (server_fd < 0) { |
19 | | -- std::cerr << "Failed to create server socket\n"; |
20 | | -- return 1; |
21 | | -- } |
22 | | -- |
23 | | -- // Since the tester restarts your program quite often, setting SO_REUSEADDR |
24 | | -- // ensures that we don't run into 'Address already in use' errors |
25 | | -- int reuse = 1; |
26 | | -- if (setsockopt(server_fd, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof(reuse)) < 0) { |
27 | | -- std::cerr << "setsockopt failed\n"; |
28 | | -- return 1; |
29 | | -- } |
30 | | -- |
31 | | -- struct sockaddr_in server_addr; |
32 | | -- server_addr.sin_family = AF_INET; |
33 | | -- server_addr.sin_addr.s_addr = INADDR_ANY; |
34 | | -- server_addr.sin_port = htons(6379); |
35 | | -- |
36 | | -- if (bind(server_fd, (struct sockaddr *) &server_addr, sizeof(server_addr)) != 0) { |
37 | | -- std::cerr << "Failed to bind to port 6379\n"; |
38 | | -- return 1; |
39 | | -- } |
40 | | -- |
41 | | -- int connection_backlog = 5; |
42 | | -- if (listen(server_fd, connection_backlog) != 0) { |
43 | | -- std::cerr << "listen failed\n"; |
44 | | -- return 1; |
45 | | -- } |
46 | | -- |
47 | | -- struct sockaddr_in client_addr; |
48 | | -- int client_addr_len = sizeof(client_addr); |
49 | | -- std::cout << "Waiting for a client to connect...\n"; |
50 | | -- |
| 1 | +@@ -25,32 +25,36 @@ |
| 2 | + if (setsockopt(server_fd, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof(reuse)) < 0) { |
| 3 | + std::cerr << "setsockopt failed\n"; |
| 4 | + return 1; |
| 5 | + } |
| 6 | + |
| 7 | + struct sockaddr_in server_addr; |
| 8 | + server_addr.sin_family = AF_INET; |
| 9 | + server_addr.sin_addr.s_addr = INADDR_ANY; |
| 10 | + server_addr.sin_port = htons(6379); |
| 11 | + |
| 12 | + if (bind(server_fd, (struct sockaddr *) &server_addr, sizeof(server_addr)) != 0) { |
| 13 | + std::cerr << "Failed to bind to port 6379\n"; |
| 14 | + return 1; |
| 15 | + } |
| 16 | + |
| 17 | + int connection_backlog = 5; |
| 18 | + if (listen(server_fd, connection_backlog) != 0) { |
| 19 | + std::cerr << "listen failed\n"; |
| 20 | + return 1; |
| 21 | + } |
| 22 | + |
| 23 | + struct sockaddr_in client_addr; |
| 24 | + int client_addr_len = sizeof(client_addr); |
| 25 | + std::cout << "Waiting for a client to connect...\n"; |
| 26 | + |
51 | 27 | - accept(server_fd, (struct sockaddr *) &client_addr, (socklen_t *) &client_addr_len); |
52 | | -- std::cout << "Client connected\n"; |
53 | | -- |
54 | | -- close(server_fd); |
55 | | -- |
56 | | -- return 0; |
57 | | --} |
| 28 | ++ int client_fd = accept(server_fd, (struct sockaddr *) &client_addr, (socklen_t *) &client_addr_len); |
| 29 | + std::cout << "Client connected\n"; |
| 30 | + |
| 31 | ++ std::string response = "+PONG\r\n"; |
| 32 | ++ send(client_fd, response.c_str(), response.size(), 0); |
| 33 | ++ |
| 34 | ++ close(client_fd); |
| 35 | + close(server_fd); |
| 36 | + |
| 37 | + return 0; |
| 38 | + } |
0 commit comments