Skip to content

Commit 1ccd728

Browse files
authored
Vutils
2 parents aa7148e + 1176144 commit 1ccd728

File tree

3 files changed

+35
-39
lines changed

3 files changed

+35
-39
lines changed

include/Vutils.h

+3-3
Original file line numberDiff line numberDiff line change
@@ -1271,11 +1271,11 @@ class Socket : public LastError
12711271
typedef int flags_t;
12721272
typedef int shutdowns_t;
12731273

1274-
enum class side_type : uint
1274+
enum class side_type : int
12751275
{
1276+
UNDEFINED = -1,
12761277
SERVER,
12771278
CLIENT,
1278-
UNDEFINED,
12791279
};
12801280

12811281
struct Handle
@@ -1347,7 +1347,7 @@ class Socket : public LastError
13471347
IResult vuapi recv_from(Buffer& data, const Handle& socket);
13481348
IResult vuapi recv_all_from(Buffer& data, const Handle& socket);
13491349

1350-
IResult vuapi close();
1350+
IResult vuapi close(const Socket::shutdowns_t flags = SD_BOTH, const bool cleanup = false);
13511351

13521352
const sockaddr_in vuapi get_local_sai();
13531353
const sockaddr_in vuapi get_remote_sai();

src/details/asyncsocket.cpp

+11-11
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,8 @@ IResult vuapi AsyncSocket::stop(const Socket::shutdowns_t flags, const bool clea
111111

112112
if (m_thread != INVALID_HANDLE_VALUE)
113113
{
114-
TerminateThread(m_thread, 0); // CloseHandle(m_thread);
114+
// TerminateThread(m_thread, 0); // CloseHandle(m_thread);
115+
// Using atomic for `m_running = false`. So, the thread will be closed after set `m_running = false` to exit looping
115116
}
116117

117118
return VU_OK;
@@ -184,7 +185,7 @@ VUResult vuapi AsyncSocket::disconnect_connections(const Socket::shutdowns_t fla
184185
this->get_connections(connections);
185186
for (const auto& connection : connections)
186187
{
187-
Socket socket(m_socket);
188+
Socket socket;
188189
socket.attach(connection);
189190
socket.disconnect(flags, cleanup);
190191
}
@@ -326,7 +327,7 @@ IResult vuapi AsyncSocket::do_connect(WSANETWORKEVENTS& events, SOCKET& connecti
326327
return events.iErrorCode[FD_CONNECT_BIT];
327328
}
328329

329-
Socket socket(m_socket);
330+
Socket socket;
330331
socket.attach(connection);
331332
this->on_connect(socket);
332333
socket.detach();
@@ -357,7 +358,7 @@ IResult vuapi AsyncSocket::do_open(WSANETWORKEVENTS& events, SOCKET& connection)
357358
m_connections[m_n_events] = obj.s;
358359
m_n_events++;
359360

360-
Socket socket(m_socket);
361+
Socket socket;
361362
socket.attach(obj);
362363
this->on_open(socket);
363364
socket.detach();
@@ -372,7 +373,7 @@ IResult vuapi AsyncSocket::do_recv(WSANETWORKEVENTS& events, SOCKET& connection)
372373
return events.iErrorCode[FD_READ_BIT];
373374
}
374375

375-
Socket socket(m_socket);
376+
Socket socket;
376377
socket.attach(connection);
377378
this->on_recv(socket);
378379
socket.detach();
@@ -387,7 +388,7 @@ IResult vuapi AsyncSocket::do_send(WSANETWORKEVENTS& events, SOCKET& connection)
387388
return events.iErrorCode[FD_WRITE_BIT];
388389
}
389390

390-
Socket socket(m_socket);
391+
Socket socket;
391392
socket.attach(connection);
392393
this->on_send(socket);
393394
socket.detach();
@@ -433,13 +434,12 @@ IResult vuapi AsyncSocket::do_close(WSANETWORKEVENTS& events, SOCKET& connection
433434
m_n_events++;
434435
}
435436

436-
Socket socket(m_socket);
437+
Socket socket;
437438
socket.attach(connection);
438439
this->on_close(socket);
440+
socket.close();
439441
socket.detach();
440442

441-
::closesocket(connection);
442-
443443
connection = INVALID_SOCKET;
444444

445445
// CompressArrays(m_Events, m_Sockets, &m_nEvents);
@@ -499,7 +499,7 @@ IResult vuapi AsyncSocket::send(
499499
int size,
500500
const Socket::flags_t flags)
501501
{
502-
Socket socket(m_socket);
502+
Socket socket;
503503
socket.attach(connection);
504504
return socket.send(ptr_data, size, flags);
505505
}
@@ -509,7 +509,7 @@ IResult vuapi AsyncSocket::send(
509509
const Buffer& data,
510510
const Socket::flags_t flags)
511511
{
512-
Socket socket(m_socket);
512+
Socket socket;
513513
socket.attach(connection);
514514
return socket.send(data, flags);
515515
}

src/details/socket.cpp

+21-25
Original file line numberDiff line numberDiff line change
@@ -144,12 +144,7 @@ Socket::~Socket()
144144

145145
if (this->available())
146146
{
147-
if (::closesocket(m_socket) == INVALID_SOCKET)
148-
{
149-
assert("close socket failed.");
150-
m_last_error_code = GetLastError();
151-
m_socket = INVALID_SOCKET;
152-
}
147+
this->close();
153148
}
154149

155150
if (WSACleanup() == INVALID_SOCKET)
@@ -460,7 +455,7 @@ IResult vuapi Socket::recv(char* ptr_data, int size, const flags_t flags)
460455

461456
timeval timeout = { 0 };
462457
timeout.tv_usec = 0;
463-
timeout.tv_sec = m_options.timeout.recv;
458+
timeout.tv_sec = m_options.timeout.recv;
464459

465460
int status = ::select(0, &fds_read, nullptr, nullptr, &timeout);
466461
if (status == SOCKET_ERROR)
@@ -586,7 +581,7 @@ IResult vuapi Socket::recv_from(char* ptr_data, int size, const Handle& socket)
586581
}
587582

588583
int n = sizeof(socket.sai);
589-
IResult z = ::recvfrom(m_socket, ptr_data, size, 0, (struct sockaddr *)&socket.sai, &n);
584+
IResult z = ::recvfrom(m_socket, ptr_data, size, 0, (struct sockaddr*)&socket.sai, &n);
590585
if (z == SOCKET_ERROR)
591586
{
592587
m_last_error_code = GetLastError();
@@ -630,21 +625,7 @@ IResult vuapi Socket::recv_all_from(Buffer& buffer, const Handle& socket)
630625
return IResult(buffer.size());
631626
}
632627

633-
VUResult vuapi Socket::close()
634-
{
635-
if (!this->available())
636-
{
637-
return 1;
638-
}
639-
640-
::closesocket(m_socket);
641-
642-
m_socket = INVALID_SOCKET;
643-
644-
return VU_OK;
645-
}
646-
647-
VUResult vuapi Socket::disconnect(const shutdowns_t flags, const bool cleanup)
628+
VUResult vuapi Socket::close(const shutdowns_t flags, const bool cleanup)
648629
{
649630
if (!this->available())
650631
{
@@ -659,8 +640,8 @@ VUResult vuapi Socket::disconnect(const shutdowns_t flags, const bool cleanup)
659640

660641
if (::shutdown(m_socket, flags) == SOCKET_ERROR)
661642
{
662-
m_last_error_code = GetLastError();
663-
return 2;
643+
// m_last_error_code = GetLastError();
644+
// return 2;
664645
}
665646

666647
if (::closesocket(m_socket) == SOCKET_ERROR)
@@ -674,6 +655,21 @@ VUResult vuapi Socket::disconnect(const shutdowns_t flags, const bool cleanup)
674655
return VU_OK;
675656
}
676657

658+
VUResult vuapi Socket::disconnect(const shutdowns_t flags, const bool cleanup)
659+
{
660+
if (!this->available())
661+
{
662+
return 1;
663+
}
664+
665+
if (this->close(flags, cleanup) != VU_OK)
666+
{
667+
return 2;
668+
}
669+
670+
return VU_OK;
671+
}
672+
677673
std::string vuapi Socket::get_host_name()
678674
{
679675
std::string result = "";

0 commit comments

Comments
 (0)