@@ -19,7 +19,7 @@ AsyncSocket::AsyncSocket(
19
19
const vu::Socket::type_t type,
20
20
const vu::Socket::protocol_t proto,
21
21
const vu::Socket::Options* options
22
- ) : m_socket(af, type, proto, true , options), m_thread(INVALID_HANDLE_VALUE), LastError()
22
+ ) : m_socket(af, type, proto, options), m_thread(INVALID_HANDLE_VALUE), LastError()
23
23
{
24
24
UNREFERENCED_PARAMETER (m_side);
25
25
@@ -33,15 +33,12 @@ AsyncSocket::AsyncSocket(
33
33
34
34
AsyncSocket::~AsyncSocket ()
35
35
{
36
- this ->close ();
37
36
}
38
37
39
38
void vuapi AsyncSocket::initialze ()
40
39
{
41
40
m_n_events = 0 ;
42
41
43
- std::lock_guard<std::recursive_mutex> lg (m_mutex_client_list);
44
-
45
42
memset (m_connections, int (INVALID_SOCKET), sizeof (m_connections));
46
43
memset (m_events, int (0 ), sizeof (m_events));
47
44
@@ -97,8 +94,6 @@ VUResult vuapi AsyncSocket::listen(const int maxcon)
97
94
return 2 ;
98
95
}
99
96
100
- std::lock_guard<std::recursive_mutex> lg (m_mutex_client_list);
101
-
102
97
m_connections[m_n_events] = m_socket.handle ();
103
98
m_events[m_n_events] = event;
104
99
m_n_events++;
@@ -110,9 +105,14 @@ VUResult vuapi AsyncSocket::listen(const int maxcon)
110
105
return result;
111
106
}
112
107
113
- IResult vuapi AsyncSocket::close (const Socket::shutdowns_t flags, const bool cleanup)
108
+ IResult vuapi AsyncSocket::stop (const Socket::shutdowns_t flags, const bool cleanup)
114
109
{
115
- this ->stop ();
110
+ if (!m_socket.available ())
111
+ {
112
+ return 1 ;
113
+ }
114
+
115
+ m_running = false ;
116
116
117
117
this ->disconnect_connections (flags, cleanup);
118
118
@@ -121,18 +121,6 @@ IResult vuapi AsyncSocket::close(const Socket::shutdowns_t flags, const bool cle
121
121
TerminateThread (m_thread, 0 ); // CloseHandle(m_thread);
122
122
}
123
123
124
- auto result = m_socket.close ();
125
-
126
- m_last_error_code = GetLastError ();
127
-
128
- return result;
129
- }
130
-
131
- VUResult vuapi AsyncSocket::stop ()
132
- {
133
- m_mutex.lock ();
134
- m_running = false ;
135
- m_mutex.unlock ();
136
124
return VU_OK;
137
125
}
138
126
@@ -152,8 +140,6 @@ VUResult vuapi AsyncSocket::connect(const Endpoint& endpoint)
152
140
return 2 ;
153
141
}
154
142
155
- std::lock_guard<std::recursive_mutex> lg (m_mutex_client_list);
156
-
157
143
auto result = m_socket.connect (endpoint);
158
144
if (result == VU_OK)
159
145
{
@@ -179,31 +165,29 @@ void vuapi AsyncSocket::get_connections(std::set<SOCKET>& connections)
179
165
{
180
166
connections.clear ();
181
167
182
- if (m_socket.available ())
168
+ if (! m_socket.available ())
183
169
{
184
- std::lock_guard<std::recursive_mutex> lg (m_mutex_client_list);
170
+ return ;
171
+ }
185
172
186
- for (auto & socket : m_connections)
173
+ for (auto & socket : m_connections)
174
+ {
175
+ if (socket == INVALID_SOCKET) // ignore invalid socket handle
187
176
{
188
- if (socket == INVALID_SOCKET) // ignore invalid socket handle
189
- {
190
- continue ;
191
- }
192
-
193
- if (m_side == side_type::SERVER && socket == m_socket.handle ()) // ignore server socket handle
194
- {
195
- continue ;
196
- }
177
+ continue ;
178
+ }
197
179
198
- connections.insert (socket);
180
+ if (m_side == side_type::SERVER && socket == m_socket.handle ()) // ignore server socket handle
181
+ {
182
+ continue ;
199
183
}
184
+
185
+ connections.insert (socket);
200
186
}
201
187
}
202
188
203
189
VUResult vuapi AsyncSocket::disconnect_connections (const Socket::shutdowns_t flags, const bool cleanup)
204
190
{
205
- std::lock_guard<std::recursive_mutex> lg (m_mutex_client_list);
206
-
207
191
std::set<SOCKET> connections;
208
192
this ->get_connections (connections);
209
193
for (const auto & connection : connections)
@@ -365,8 +349,6 @@ IResult vuapi AsyncSocket::do_open(WSANETWORKEVENTS& events, SOCKET& connection)
365
349
return events.iErrorCode [FD_ACCEPT_BIT];
366
350
}
367
351
368
- std::lock_guard<std::recursive_mutex> lg (m_mutex_client_list);
369
-
370
352
Socket::Handle obj = { 0 };
371
353
int n = static_cast <int >(sizeof (obj.sai ));
372
354
@@ -398,8 +380,6 @@ IResult vuapi AsyncSocket::do_recv(WSANETWORKEVENTS& events, SOCKET& connection)
398
380
return events.iErrorCode [FD_READ_BIT];
399
381
}
400
382
401
- std::lock_guard<std::recursive_mutex> lg (m_mutex_client_list);
402
-
403
383
Socket socket (m_socket);
404
384
socket.attach (connection);
405
385
this ->on_recv (socket);
@@ -415,8 +395,6 @@ IResult vuapi AsyncSocket::do_send(WSANETWORKEVENTS& events, SOCKET& connection)
415
395
return events.iErrorCode [FD_WRITE_BIT];
416
396
}
417
397
418
- std::lock_guard<std::recursive_mutex> lg (m_mutex_client_list);
419
-
420
398
Socket socket (m_socket);
421
399
socket.attach (connection);
422
400
this ->on_send (socket);
@@ -427,16 +405,14 @@ IResult vuapi AsyncSocket::do_send(WSANETWORKEVENTS& events, SOCKET& connection)
427
405
428
406
IResult vuapi AsyncSocket::do_close (WSANETWORKEVENTS& events, SOCKET& connection)
429
407
{
430
- // TODO: In certain cases(e.g., user - mode drivers), it crashes.
408
+ // TODO: Vic. In certain cases(e.g., user - mode drivers), it crashes.
431
409
// I'm not sure why, so temporarily comment out these codes.
432
410
//
433
411
// if (events.iErrorCode[FD_CLOSE_BIT] != 0)
434
412
// {
435
413
// return events.iErrorCode[FD_CLOSE_BIT];
436
414
// }
437
415
438
- std::lock_guard<std::recursive_mutex> lg (m_mutex_client_list);
439
-
440
416
std::vector<std::pair<SOCKET, HANDLE>> in_used_connections;
441
417
442
418
for (int i = 0 ; i < WSA_MAXIMUM_WAIT_EVENTS; i++)
0 commit comments