Skip to content

Commit c733b3d

Browse files
authored
Merge pull request #439 from codecrafters-io/andy/fix
Fix C++ solution diff
2 parents 58056e1 + dac7ceb commit c733b3d

File tree

3 files changed

+37
-117
lines changed

3 files changed

+37
-117
lines changed
File renamed without changes.

solutions/cpp/02-rg2/diff/src/Server.cpp.diff

Lines changed: 0 additions & 61 deletions
This file was deleted.
Lines changed: 37 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -1,57 +1,38 @@
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+
5127
- 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

Comments
 (0)