3
3
4
4
using namespace tpt ;
5
5
6
- WinSocket::WinSocket ()
7
- {
8
- this ->ip_address = " 127.0.0.1" ;
9
- this ->port = 8000 ;
10
- this ->max_connections = 10 ;
11
- this ->logger = ConsoleLogger ();
12
-
13
- if (WSAStartup (MAKEWORD (2 , 2 ), &wsa) != 0 )
14
- {
15
- std::printf (" Failed. Error Code : %d" , WSAGetLastError ());
16
- WSACleanup ();
17
- exit (EXIT_FAILURE);
18
- }
19
-
20
- std::cout << " Creating socket ..." << std::endl;
21
- this ->server_socket = socket (AF_INET, SOCK_STREAM, 0 );
22
- if (this ->server_socket == INVALID_SOCKET)
23
- {
24
- std::printf (" Could not create socket: %d\n " , WSAGetLastError ());
25
- WSACleanup ();
26
- exit (EXIT_FAILURE);
27
- }
28
-
29
- this ->server_address .sin_family = AF_INET;
30
- this ->server_address .sin_port = htons (this ->port );
31
- this ->server_address .sin_addr .s_addr = inet_addr (this ->ip_address .c_str ());
32
-
33
- Utils::fillIPBlacklist (this ->ip_blacklist );
34
- }
35
-
36
- WinSocket::WinSocket (ConsoleLogger logger)
37
- {
38
- this ->ip_address = " 127.0.0.1" ;
39
- this ->port = 8000 ;
40
- this ->max_connections = 10 ;
41
- this ->logger = logger;
42
-
43
- if (WSAStartup (MAKEWORD (2 , 2 ), &wsa) != 0 )
44
- {
45
- std::printf (" Failed. Error Code : %d" , WSAGetLastError ());
46
- WSACleanup ();
47
- exit (EXIT_FAILURE);
48
- }
49
-
50
- std::cout << " Creating socket ..." << std::endl;
51
- this ->server_socket = socket (AF_INET, SOCK_STREAM, 0 );
52
- if (this ->server_socket == INVALID_SOCKET)
53
- {
54
- std::printf (" Could not create socket: %d\n " , WSAGetLastError ());
55
- WSACleanup ();
56
- exit (EXIT_FAILURE);
57
- }
58
-
59
- this ->server_address .sin_family = AF_INET;
60
- this ->server_address .sin_port = htons (this ->port );
61
- this ->server_address .sin_addr .s_addr = inet_addr (this ->ip_address .c_str ());
62
-
63
- Utils::fillIPBlacklist (this ->ip_blacklist );
64
- }
65
-
66
- WinSocket::WinSocket (ConsoleLogger logger, unsigned int port)
67
- {
68
- this ->ip_address = " 127.0.0.1" ;
69
- this ->port = port;
70
- this ->max_connections = 10 ;
71
- this ->logger = logger;
72
-
73
- if (WSAStartup (MAKEWORD (2 , 2 ), &wsa) != 0 )
74
- {
75
- std::printf (" Failed. Error Code : %d" , WSAGetLastError ());
76
- WSACleanup ();
77
- exit (EXIT_FAILURE);
78
- }
6
+ WinSocket::WinSocket () : WinSocket(ConsoleLogger()) {}
79
7
80
- std::cout << " Creating socket ..." << std::endl;
81
- this ->server_socket = socket (AF_INET, SOCK_STREAM, 0 );
82
- if (this ->server_socket == INVALID_SOCKET)
83
- {
84
- std::printf (" Could not create socket: %d\n " , WSAGetLastError ());
85
- WSACleanup ();
86
- exit (EXIT_FAILURE);
87
- }
88
-
89
- this ->server_address .sin_family = AF_INET;
90
- this ->server_address .sin_port = htons (this ->port );
91
- this ->server_address .sin_addr .s_addr = inet_addr (this ->ip_address .c_str ());
92
-
93
- Utils::fillIPBlacklist (this ->ip_blacklist );
94
- }
95
-
96
- WinSocket::WinSocket (ConsoleLogger logger, std::string ip_address, unsigned int port)
97
- {
98
- this ->ip_address = ip_address;
99
- this ->port = port;
100
- this ->max_connections = 10 ;
101
- this ->logger = logger;
102
-
103
- if (WSAStartup (MAKEWORD (2 , 2 ), &wsa) != 0 )
104
- {
105
- std::printf (" Failed. Error Code : %d" , WSAGetLastError ());
106
- WSACleanup ();
107
- exit (EXIT_FAILURE);
108
- }
109
-
110
- std::cout << " Creating socket ..." << std::endl;
111
- this ->server_socket = socket (AF_INET, SOCK_STREAM, 0 );
112
- if (this ->server_socket == INVALID_SOCKET)
113
- {
114
- std::printf (" Could not create socket: %d\n " , WSAGetLastError ());
115
- WSACleanup ();
116
- exit (EXIT_FAILURE);
117
- }
8
+ WinSocket::WinSocket (ConsoleLogger logger) : WinSocket(logger, " 127.0.0.1" , 8000 , 10 ) {}
118
9
119
- this ->server_address .sin_family = AF_INET;
120
- this ->server_address .sin_port = htons (this ->port );
121
- this ->server_address .sin_addr .s_addr = inet_addr (this ->ip_address .c_str ());
10
+ WinSocket::WinSocket (ConsoleLogger logger, unsigned int port) : WinSocket(logger, " 127.0.0.1" , port, 10 ) {}
122
11
123
- Utils::fillIPBlacklist (this ->ip_blacklist );
124
- }
12
+ WinSocket::WinSocket (ConsoleLogger logger, std::string ip_address, unsigned int port) : WinSocket(logger, ip_address, port, 10 ) {}
125
13
126
14
WinSocket::WinSocket (ConsoleLogger logger, std::string ip_address, unsigned int port, unsigned int max_connections)
127
15
{
128
16
this ->ip_address = ip_address;
129
17
this ->port = port;
130
- this ->max_connections = 10 ;
18
+ this ->max_connections = max_connections ;
131
19
this ->logger = logger;
132
20
133
21
if (WSAStartup (MAKEWORD (2 , 2 ), &wsa) != 0 )
134
22
{
135
- std::printf (" Failed. Error Code : %d" , WSAGetLastError ());
136
- WSACleanup ();
137
- exit (EXIT_FAILURE);
23
+ throw SocketCreationException (" WSAStartup error" , WSAGetLastError ());
138
24
}
139
25
140
26
std::cout << " Creating socket ..." << std::endl;
141
27
this ->server_socket = socket (AF_INET, SOCK_STREAM, 0 );
142
28
if (this ->server_socket == INVALID_SOCKET)
143
29
{
144
- std::printf (" Could not create socket: %d\n " , WSAGetLastError ());
145
- WSACleanup ();
146
- exit (EXIT_FAILURE);
30
+ throw SocketCreationException (" could not create socket" , WSAGetLastError ());
147
31
}
148
32
149
33
this ->server_address .sin_family = AF_INET;
@@ -158,11 +42,8 @@ void WinSocket::bindSocket()
158
42
std::cout << " Binding socket ..." << std::endl;
159
43
if ((bind (this ->server_socket , (struct sockaddr *)&this ->server_address , sizeof (server_address))) == SOCKET_ERROR)
160
44
{
161
- std::printf (" Binding failed: %d\n " , WSAGetLastError ());
162
- WSACleanup ();
163
- exit (EXIT_FAILURE);
45
+ throw SocketBindingException (" binding failed" , WSAGetLastError ());
164
46
}
165
- this ->setSocketTimeout (this ->server_socket , 5 );
166
47
std::cout << " Binding done!" << std::endl;
167
48
std::cout << " Listening to connections ..." << std::endl;
168
49
}
@@ -171,22 +52,20 @@ void WinSocket::listenToConnections()
171
52
{
172
53
if ((listen (this ->server_socket , this ->max_connections )) == SOCKET_ERROR)
173
54
{
174
- std::printf (" Listening failed: %d\n " , WSAGetLastError ());
175
- closesocket (this ->server_socket );
176
- WSACleanup ();
177
- exit (EXIT_FAILURE);
55
+ throw SocketListenException (" listening failed" , WSAGetLastError ());
178
56
}
179
57
}
180
58
181
59
void WinSocket::acceptConnection (SOCKET &client_socket, void *client_address)
182
60
{
183
- int client_addr_size = sizeof (sockaddr_in);
184
- client_socket = accept (this ->server_socket , static_cast <sockaddr *>(client_address), &client_addr_size);
61
+ struct sockaddr_storage client_addr_storage;
62
+ int client_addr_size = sizeof (client_addr_storage);
63
+
64
+ // this->setSocketTimeout(this->server_socket, 5);
65
+ client_socket = accept (this ->server_socket , (sockaddr *)&client_addr_storage, &client_addr_size);
185
66
if (client_socket == INVALID_SOCKET)
186
67
{
187
- std::printf (" Error accepting connections: %d\n " , WSAGetLastError ());
188
- WSACleanup ();
189
- exit (EXIT_FAILURE);
68
+ throw SocketAcceptException (" error accepting connections" , WSAGetLastError ());
190
69
}
191
70
192
71
// Assuming client_address is meant to store the result
@@ -225,16 +104,17 @@ ssize_t WinSocket::receiveData(SOCKET client_socket, char *buffer, unsigned int
225
104
ssize_t data = recv (client_socket, buffer, buffer_size, 0 );
226
105
if (data < 0 )
227
106
{
228
- std::printf (" Receive error\n " );
229
- WSACleanup ();
230
- exit (EXIT_FAILURE);
107
+ throw SocketReceiveException (" recv error" , WSAGetLastError ());
231
108
}
232
109
return data;
233
110
}
234
111
235
112
void WinSocket::sendData (SOCKET client_socket, const void *buffer, unsigned int buffer_size, int flags)
236
113
{
237
- send (client_socket, (char *)buffer, buffer_size, flags);
114
+ if (send (client_socket, (char *)buffer, buffer_size, flags) == -1 )
115
+ {
116
+ throw SocketSendException ();
117
+ }
238
118
}
239
119
240
120
void WinSocket::closeSocket ()
@@ -267,4 +147,9 @@ void WinSocket::setSocketTimeout(SOCKET sock, int timeoutSec)
267
147
268
148
WinSocket::~WinSocket () {}
269
149
150
+ std::string WinSocket::getClientIp ()
151
+ {
152
+ return this ->client_ip ;
153
+ }
154
+
270
155
#endif
0 commit comments