1
+ #include < cstdlib>
2
+ #include < cstring>
3
+ #include < iostream>
4
+ #include < netdb.h>
5
+ #include < string>
6
+ #include < unistd.h>
7
+ #include < arpa/inet.h>
8
+ #include < sys/socket.h>
9
+ #include < sys/types.h>
10
+
11
+ int main (int argc, char * argv[]) {
12
+ // Disable output buffering
13
+ std::cout << std::unitbuf;
14
+ std::cerr << std::unitbuf;
15
+
16
+ int server_fd = socket (AF_INET, SOCK_STREAM, 0 );
17
+ if (server_fd < 0 ) {
18
+ std::cerr << " Failed to create server socket: " << std::endl;
19
+ return 1 ;
20
+ }
21
+
22
+ // Since the tester restarts your program quite often, setting SO_REUSEADDR
23
+ // ensures that we don't run into 'Address already in use' errors
24
+ int reuse = 1 ;
25
+ if (setsockopt (server_fd, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof (reuse)) < 0 ) {
26
+ close (server_fd);
27
+ std::cerr << " setsockopt failed: " << std::endl;
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 (9092 );
35
+
36
+ if (bind (server_fd, reinterpret_cast <struct sockaddr *>(&server_addr), sizeof (server_addr)) != 0 ) {
37
+ close (server_fd);
38
+ std::cerr << " Failed to bind to port 9092" << std::endl;
39
+ return 1 ;
40
+ }
41
+
42
+ int connection_backlog = 5 ;
43
+ if (listen (server_fd, connection_backlog) != 0 ) {
44
+ close (server_fd);
45
+ std::cerr << " listen failed" << std::endl;
46
+ return 1 ;
47
+ }
48
+
49
+ std::cout << " Waiting for a client to connect...\n " ;
50
+
51
+ struct sockaddr_in client_addr{};
52
+ socklen_t client_addr_len = sizeof (client_addr);
53
+
54
+ // You can use print statements as follows for debugging, they'll be visible when running tests.
55
+ std::cerr << " Logs from your program will appear here!\n " ;
56
+
57
+ // Uncomment this block to pass the first stage
58
+ //
59
+ // int client_fd = accept(server_fd, reinterpret_cast<struct sockaddr*>(&client_addr), &client_addr_len);
60
+ // std::cout << "Client connected\n";
61
+ // close(client_fd);
62
+
63
+ close (server_fd);
64
+ return 0 ;
65
+ }
0 commit comments