1
+ #include < cstdlib>
2
+ #include < cstring>
3
+ #include < iostream>
4
+ #include < netdb.h>
5
+ #include < string>
6
+ #include < system_error>
7
+ #include < unistd.h>
8
+ #include < arpa/inet.h>
9
+ #include < sys/socket.h>
10
+ #include < sys/types.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
+ // You can use print statements as follows for debugging, they'll be visible when running tests.
18
+ std::cerr << " Logs from your program will appear here!\n " ;
19
+
20
+ // Create socket
21
+ int server_fd = socket (AF_INET, SOCK_STREAM, 0 );
22
+ if (server_fd < 0 ) {
23
+ throw std::system_error (errno, std::generic_category (), " Failed to create server socket" );
24
+ }
25
+
26
+ // Set socket options
27
+ int reuse = 1 ;
28
+ if (setsockopt (server_fd, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof (reuse)) < 0 ) {
29
+ close (server_fd);
30
+ throw std::system_error (errno, std::generic_category (), " setsockopt failed" );
31
+ }
32
+
33
+ // Configure server address
34
+ struct sockaddr_in server_addr{};
35
+ server_addr.sin_family = AF_INET;
36
+ server_addr.sin_addr .s_addr = INADDR_ANY;
37
+ server_addr.sin_port = htons (9092 );
38
+
39
+ // Bind socket
40
+ if (bind (server_fd, reinterpret_cast <struct sockaddr *>(&server_addr), sizeof (server_addr)) != 0 ) {
41
+ close (server_fd);
42
+ throw std::system_error (errno, std::generic_category (), " Failed to bind to port 9092" );
43
+ }
44
+
45
+ // Listen for connections
46
+ int connection_backlog = 5 ;
47
+ if (listen (server_fd, connection_backlog) != 0 ) {
48
+ close (server_fd);
49
+ throw std::system_error (errno, std::generic_category (), " listen failed" );
50
+ }
51
+
52
+ std::cout << " Waiting for a client to connect...\n " ;
53
+
54
+ // Accept client connection
55
+ struct sockaddr_in client_addr{};
56
+ socklen_t client_addr_len = sizeof (client_addr);
57
+
58
+ // Uncomment this block to pass the first stage
59
+ //
60
+ // int client_fd = accept(server_fd, reinterpret_cast<struct sockaddr*>(&client_addr), &client_addr_len);
61
+ // std::cout << "Client connected\n";
62
+ // close(client_fd);
63
+
64
+ close (server_fd);
65
+ return 0 ;
66
+ }
0 commit comments