|
@@ -24,26 +24,32 @@ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
|
|
OTHER DEALINGS IN THE SOFTWARE.
|
|
OTHER DEALINGS IN THE SOFTWARE.
|
|
|
*/
|
|
*/
|
|
|
|
|
|
|
|
|
|
+#pragma once
|
|
|
|
|
+
|
|
|
#include <winsock2.h>
|
|
#include <winsock2.h>
|
|
|
-#pragma comment(lib, "wsock32.lib")
|
|
|
|
|
|
|
+#include <windows.h>
|
|
|
|
|
|
|
|
#include "NetAddress.h"
|
|
#include "NetAddress.h"
|
|
|
#include "Assert.h"
|
|
#include "Assert.h"
|
|
|
#include "Types.h"
|
|
#include "Types.h"
|
|
|
#include "OS.h"
|
|
#include "OS.h"
|
|
|
|
|
|
|
|
|
|
+#pragma comment(lib, "Ws2_32.lib")
|
|
|
|
|
+
|
|
|
namespace crown
|
|
namespace crown
|
|
|
{
|
|
{
|
|
|
|
|
|
|
|
|
|
+//-----------------------------------------------------------------------------
|
|
|
struct ReadResult
|
|
struct ReadResult
|
|
|
{
|
|
{
|
|
|
- enum { NO_ERROR, UNKNOWN, REMOTE_CLOSED } error;
|
|
|
|
|
|
|
+ enum { NO_RESULT_ERROR, UNKNOWN, REMOTE_CLOSED } error;
|
|
|
size_t received_bytes;
|
|
size_t received_bytes;
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
|
|
+//-----------------------------------------------------------------------------
|
|
|
struct WriteResult
|
|
struct WriteResult
|
|
|
{
|
|
{
|
|
|
- enum { NO_ERROR, UNKNOWN, REMOTE_CLOSED } error;
|
|
|
|
|
|
|
+ enum { NO_RESULT_ERROR, UNKNOWN, REMOTE_CLOSED } error;
|
|
|
size_t sent_bytes;
|
|
size_t sent_bytes;
|
|
|
};
|
|
};
|
|
|
|
|
|
|
@@ -55,7 +61,6 @@ public:
|
|
|
TCPSocket()
|
|
TCPSocket()
|
|
|
: m_socket(0)
|
|
: m_socket(0)
|
|
|
{
|
|
{
|
|
|
-
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
//-----------------------------------------------------------------------------
|
|
@@ -65,59 +70,15 @@ public:
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
//-----------------------------------------------------------------------------
|
|
|
- TCPSocket::~TCPSocket()
|
|
|
|
|
|
|
+ ~TCPSocket()
|
|
|
{
|
|
{
|
|
|
close();
|
|
close();
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-/* //-----------------------------------------------------------------------------
|
|
|
|
|
- bool TCPSocket::open(uint16_t port)
|
|
|
|
|
- {
|
|
|
|
|
- int32_t sd = socket(AF_INET, SOCK_STREAM, 0);
|
|
|
|
|
-
|
|
|
|
|
- if (sd <= 0)
|
|
|
|
|
- {
|
|
|
|
|
- os::print32_tf("failed to open socket\n");
|
|
|
|
|
- set_socket_id(0);
|
|
|
|
|
- return false;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- set_socket_id(sd);
|
|
|
|
|
-
|
|
|
|
|
- // Bind socket
|
|
|
|
|
- sockaddr_in address;
|
|
|
|
|
- address.sin_family = AF_INET;
|
|
|
|
|
- address.sin_addr.s_addr = htonl(INADDR_ANY);
|
|
|
|
|
- address.sin_port = htons(port);
|
|
|
|
|
-
|
|
|
|
|
- if (bind(sd, (const sockaddr*)&address, sizeof(sockaddr_in)) < 0)
|
|
|
|
|
- {
|
|
|
|
|
- os::print32_tf("failed to bind socket\n");
|
|
|
|
|
- close();
|
|
|
|
|
- return false;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- listen(sd, 5);
|
|
|
|
|
- os::print32_tf("listening on port %d", port);
|
|
|
|
|
-
|
|
|
|
|
- sockaddr_in client;
|
|
|
|
|
- uint32_t client_length = sizeof(client);
|
|
|
|
|
-
|
|
|
|
|
- int32_t active_sd = accept(sd, (sockaddr*)&client, &client_length);
|
|
|
|
|
- if (active_sd < 0)
|
|
|
|
|
- {
|
|
|
|
|
- os::print32_tf("failed to accept connections");
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- set_active_socket_id(active_sd);
|
|
|
|
|
-
|
|
|
|
|
- return true;
|
|
|
|
|
- }*/
|
|
|
|
|
-
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
//-----------------------------------------------------------------------------
|
|
|
- bool TCPSocket::connect(const NetAddress& destination, uint16_t port)
|
|
|
|
|
|
|
+ bool connect(const NetAddress& destination, uint16_t port)
|
|
|
{
|
|
{
|
|
|
- int sd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
|
|
|
|
|
|
|
+ int sd = ::socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
|
|
|
|
|
|
|
|
if (sd <= 0)
|
|
if (sd <= 0)
|
|
|
{
|
|
{
|
|
@@ -130,39 +91,41 @@ public:
|
|
|
|
|
|
|
|
sockaddr_in address;
|
|
sockaddr_in address;
|
|
|
address.sin_family = AF_INET;
|
|
address.sin_family = AF_INET;
|
|
|
- address.sin_addr.s_addr = htonl(destination.address());
|
|
|
|
|
- address.sin_port = htons(port);
|
|
|
|
|
|
|
+ address.sin_addr.s_addr = ::htonl(destination.address());
|
|
|
|
|
+ address.sin_port = ::htons(port);
|
|
|
|
|
|
|
|
- if (::connect(sd, (const sockaddr*)&address, sizeof(sockaddr_in)) < 0)
|
|
|
|
|
|
|
+ if (::connect(m_socket, (const sockaddr*)&address, sizeof(sockaddr_in)) < 0)
|
|
|
{
|
|
{
|
|
|
os::printf("failed to connect socket\n");
|
|
os::printf("failed to connect socket\n");
|
|
|
close();
|
|
close();
|
|
|
return false;
|
|
return false;
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+ return true;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
//-----------------------------------------------------------------------------
|
|
|
- int32_t TCPSocket::close()
|
|
|
|
|
|
|
+ void close()
|
|
|
{
|
|
{
|
|
|
if (m_socket != 0)
|
|
if (m_socket != 0)
|
|
|
{
|
|
{
|
|
|
- ::close(m_socket);
|
|
|
|
|
|
|
+ ::closesocket(m_socket);
|
|
|
m_socket = 0;
|
|
m_socket = 0;
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
//-----------------------------------------------------------------------------
|
|
|
- ReadResult TCPSocket::read(void* data, int32_t size)
|
|
|
|
|
|
|
+ ReadResult read(void* data, int32_t size)
|
|
|
{
|
|
{
|
|
|
CE_ASSERT_NOT_NULL(data);
|
|
CE_ASSERT_NOT_NULL(data);
|
|
|
|
|
|
|
|
- int received_bytes = recv(m_socket, (char*)data, size, 0);
|
|
|
|
|
|
|
+ int received_bytes = ::recv(m_socket, (char*)data, size, 0);
|
|
|
|
|
|
|
|
ReadResult result;
|
|
ReadResult result;
|
|
|
|
|
|
|
|
if (received_bytes < 0)
|
|
if (received_bytes < 0)
|
|
|
{
|
|
{
|
|
|
- result.error = ReadResult::NO_ERROR;
|
|
|
|
|
|
|
+ result.error = ReadResult::NO_RESULT_ERROR;
|
|
|
result.received_bytes = 0;
|
|
result.received_bytes = 0;
|
|
|
}
|
|
}
|
|
|
if (received_bytes == 0)
|
|
if (received_bytes == 0)
|
|
@@ -171,7 +134,7 @@ public:
|
|
|
}
|
|
}
|
|
|
else
|
|
else
|
|
|
{
|
|
{
|
|
|
- result.error = ReadResult::NO_ERROR;
|
|
|
|
|
|
|
+ result.error = ReadResult::NO_RESULT_ERROR;
|
|
|
result.received_bytes = received_bytes;
|
|
result.received_bytes = received_bytes;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -179,11 +142,11 @@ public:
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
//-----------------------------------------------------------------------------
|
|
|
- bool TCPSocket::write(const void* data, int32_t size)
|
|
|
|
|
|
|
+ WriteResult write(const void* data, int32_t size)
|
|
|
{
|
|
{
|
|
|
CE_ASSERT_NOT_NULL(data);
|
|
CE_ASSERT_NOT_NULL(data);
|
|
|
|
|
|
|
|
- int sent_bytes = ::send(sd, (const char*)data, size, 0);
|
|
|
|
|
|
|
+ int sent_bytes = ::send(m_socket, (const char*)data, size, 0);
|
|
|
|
|
|
|
|
WriteResult result;
|
|
WriteResult result;
|
|
|
|
|
|
|
@@ -193,7 +156,7 @@ public:
|
|
|
}
|
|
}
|
|
|
else
|
|
else
|
|
|
{
|
|
{
|
|
|
- result.error = WriteResult::NO_ERROR;
|
|
|
|
|
|
|
+ result.error = WriteResult::NO_RESULT_ERROR;
|
|
|
result.sent_bytes = sent_bytes;
|
|
result.sent_bytes = sent_bytes;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -215,24 +178,24 @@ public:
|
|
|
{
|
|
{
|
|
|
int& sock_id = m_listener.m_socket;
|
|
int& sock_id = m_listener.m_socket;
|
|
|
|
|
|
|
|
- sock_id = socket(AF_INET, SOCK_STREAM, 0);
|
|
|
|
|
- CE_ASSERT(socket_id != INVALID_SOCKET, "Unable to open socket");
|
|
|
|
|
|
|
+ sock_id = ::socket(AF_INET, SOCK_STREAM, 0);
|
|
|
|
|
+ CE_ASSERT(sock_id != INVALID_SOCKET, "Unable to open socket");
|
|
|
|
|
|
|
|
// set non-blocking io
|
|
// set non-blocking io
|
|
|
DWORD non_blocking = 1;
|
|
DWORD non_blocking = 1;
|
|
|
- int result = ioctlsocket(sock_id, FIONBIO, &non_blocking);
|
|
|
|
|
|
|
+ int result = ::ioctlsocket(sock_id, FIONBIO, &non_blocking);
|
|
|
CE_ASSERT(result == 0, "Unable to set socket non-blocking");
|
|
CE_ASSERT(result == 0, "Unable to set socket non-blocking");
|
|
|
|
|
|
|
|
// Bind socket
|
|
// Bind socket
|
|
|
sockaddr_in address;
|
|
sockaddr_in address;
|
|
|
address.sin_family = AF_INET;
|
|
address.sin_family = AF_INET;
|
|
|
- address.sin_addr.s_addr = htonl(INADDR_ANY);
|
|
|
|
|
- address.sin_port = htons(port);
|
|
|
|
|
|
|
+ address.sin_addr.s_addr = ::htonl(INADDR_ANY);
|
|
|
|
|
+ address.sin_port = ::htons(port);
|
|
|
|
|
|
|
|
result = ::bind(sock_id, (const sockaddr*)&address, sizeof(sockaddr_in));
|
|
result = ::bind(sock_id, (const sockaddr*)&address, sizeof(sockaddr_in));
|
|
|
CE_ASSERT(result == 0, "Unable to bind socket");
|
|
CE_ASSERT(result == 0, "Unable to bind socket");
|
|
|
|
|
|
|
|
- result = ::listen(sd, 5);
|
|
|
|
|
|
|
+ result = ::listen(sock_id, 5);
|
|
|
CE_ASSERT(result == 0, "Unable to listen on socket");
|
|
CE_ASSERT(result == 0, "Unable to listen on socket");
|
|
|
|
|
|
|
|
return true;
|
|
return true;
|
|
@@ -250,15 +213,16 @@ public:
|
|
|
int& sock_id = m_listener.m_socket;
|
|
int& sock_id = m_listener.m_socket;
|
|
|
|
|
|
|
|
sockaddr_in client;
|
|
sockaddr_in client;
|
|
|
- uint32_t client_length = sizeof(client);
|
|
|
|
|
|
|
+ int client_length = sizeof(client);
|
|
|
|
|
|
|
|
- int32_t asd = accept(sd, (sockaddr*)&client, &client_length);
|
|
|
|
|
|
|
+ int asd = ::accept(sock_id, (sockaddr*)&client, &client_length);
|
|
|
if (asd < 0)
|
|
if (asd < 0)
|
|
|
{
|
|
{
|
|
|
return false;
|
|
return false;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- int result = ioctlsocket(asd, FIONBIO, &non_blocking);
|
|
|
|
|
|
|
+ DWORD non_blocking = 1;
|
|
|
|
|
+ int result = ::ioctlsocket(asd, FIONBIO, &non_blocking);
|
|
|
CE_ASSERT(result == 0, "Unable to set socket non-blocking");
|
|
CE_ASSERT(result == 0, "Unable to set socket non-blocking");
|
|
|
|
|
|
|
|
c.m_socket = asd;
|
|
c.m_socket = asd;
|
|
@@ -287,124 +251,122 @@ private:
|
|
|
class UDPSocket
|
|
class UDPSocket
|
|
|
{
|
|
{
|
|
|
//-----------------------------------------------------------------------------
|
|
//-----------------------------------------------------------------------------
|
|
|
- UDPSocket::UDPSocket()
|
|
|
|
|
|
|
+ UDPSocket()
|
|
|
: m_socket(0)
|
|
: m_socket(0)
|
|
|
{
|
|
{
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
//-----------------------------------------------------------------------------
|
|
|
- UDPSocket::~UDPSocket()
|
|
|
|
|
|
|
+ ~UDPSocket()
|
|
|
{
|
|
{
|
|
|
close();
|
|
close();
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
//-----------------------------------------------------------------------------
|
|
|
- bool UDPSocket::open(uint16_t port)
|
|
|
|
|
|
|
+ bool open(uint16_t port)
|
|
|
{
|
|
{
|
|
|
- CE_ASSERT(!is_open(), "Socket is already open");
|
|
|
|
|
|
|
+ // CE_ASSERT(!is_open(), "Socket is already open");
|
|
|
|
|
|
|
|
- m_socket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
|
|
|
|
|
- CE_ASSERT(m_socket != INVALID_SOCKET, "Unable to open socket");
|
|
|
|
|
|
|
+ // m_socket = ::socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
|
|
|
|
|
+ // CE_ASSERT(m_socket != INVALID_SOCKET, "Unable to open socket");
|
|
|
|
|
|
|
|
- // bind to port
|
|
|
|
|
- sockaddr_in address;
|
|
|
|
|
- address.sin_family = AF_INET;
|
|
|
|
|
- address.sin_addr.s_addr = INADDR_ANY;
|
|
|
|
|
- address.sin_port = htons(port);
|
|
|
|
|
|
|
+ // // bind to port
|
|
|
|
|
+ // sockaddr_in address;
|
|
|
|
|
+ // address.sin_family = AF_INET;
|
|
|
|
|
+ // address.sin_addr.s_addr = INADDR_ANY;
|
|
|
|
|
+ // address.sin_port = ::htons(port);
|
|
|
|
|
|
|
|
- int result = ::bind(m_socket, (const sockaddr*)&address, sizeof(sockaddr_in));
|
|
|
|
|
- CE_ASSERT(result == 0, "Unable to bind socket");
|
|
|
|
|
|
|
+ // int result = ::bind(m_socket, (const sockaddr*)&address, sizeof(sockaddr_in));
|
|
|
|
|
+ // CE_ASSERT(result == 0, "Unable to bind socket");
|
|
|
|
|
|
|
|
- // set non-blocking io
|
|
|
|
|
- DWORD non_blocking = 1;
|
|
|
|
|
- result = ioctlsocket(socket, FIONBIO, &non_blocking);
|
|
|
|
|
- CE_ASSERT(result == 0, "Unable to bind socket");
|
|
|
|
|
|
|
+ // // set non-blocking io
|
|
|
|
|
+ // DWORD non_blocking = 1;
|
|
|
|
|
+ // result = ::ioctlsocket(m_socket, FIONBIO, &non_blocking);
|
|
|
|
|
+ // CE_ASSERT(result == 0, "Unable to bind socket");
|
|
|
|
|
|
|
|
return true;
|
|
return true;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
//-----------------------------------------------------------------------------
|
|
|
- ReadResult UDPSocket::read(NetAddress& sender, uint16_t& port, const void* data, size_t size)
|
|
|
|
|
|
|
+ ReadResult read(NetAddress& sender, uint16_t& port, const void* data, size_t size)
|
|
|
{
|
|
{
|
|
|
- CE_ASSERT_NOT_NULL(data);
|
|
|
|
|
|
|
+ // CE_ASSERT_NOT_NULL(data);
|
|
|
|
|
|
|
|
- typedef int socklen_t;
|
|
|
|
|
|
|
+ // typedef int socklen_t;
|
|
|
|
|
|
|
|
- sockaddr_in from;
|
|
|
|
|
- socklen_t from_length = sizeof(from);
|
|
|
|
|
|
|
+ // sockaddr_in from;
|
|
|
|
|
+ // socklen_t from_length = sizeof(from);
|
|
|
|
|
|
|
|
- int received_bytes = recvfrom(m_socket, (char*)data, size, 0, (sockaddr*)&from, &from_length);
|
|
|
|
|
|
|
+ // int received_bytes = ::recvfrom(m_socket, (char*)data, size, 0, (sockaddr*)&from, &from_length);
|
|
|
|
|
|
|
|
ReadResult result;
|
|
ReadResult result;
|
|
|
|
|
|
|
|
- if (received_bytes < 0)
|
|
|
|
|
- {
|
|
|
|
|
- result.error = ReadResult::NO_ERROR;
|
|
|
|
|
- result.received_bytes = 0;
|
|
|
|
|
- }
|
|
|
|
|
- else if (received_bytes == 0)
|
|
|
|
|
- {
|
|
|
|
|
- result.error = ReadResult::REMOTE_CLOSED;
|
|
|
|
|
- }
|
|
|
|
|
- else
|
|
|
|
|
- {
|
|
|
|
|
- result.error = ReadResult::NO_ERROR;
|
|
|
|
|
- result.received_bytes = received_bytes;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- sender.set(ntohl(from.sin_addr.s_addr));
|
|
|
|
|
- port = ntohs(from.sin_port);
|
|
|
|
|
|
|
+ // if (received_bytes < 0)
|
|
|
|
|
+ // {
|
|
|
|
|
+ // result.error = ReadResult::NO_RESULT_ERROR;
|
|
|
|
|
+ // result.received_bytes = 0;
|
|
|
|
|
+ // }
|
|
|
|
|
+ // else if (received_bytes == 0)
|
|
|
|
|
+ // {
|
|
|
|
|
+ // result.error = ReadResult::REMOTE_CLOSED;
|
|
|
|
|
+ // }
|
|
|
|
|
+ // else
|
|
|
|
|
+ // {
|
|
|
|
|
+ // result.error = ReadResult::NO_RESULT_ERROR;
|
|
|
|
|
+ // result.received_bytes = received_bytes;
|
|
|
|
|
+ // }
|
|
|
|
|
+
|
|
|
|
|
+ // sender.set(::ntohl(from.sin_addr.s_addr));
|
|
|
|
|
+ // port = ::ntohs(from.sin_port);
|
|
|
|
|
|
|
|
return result;
|
|
return result;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
//-----------------------------------------------------------------------------
|
|
|
- WriteResult UDPSocket::write(const NetAddress& receiver, uint16_t port, void* data, size_t size)
|
|
|
|
|
|
|
+ WriteResult write(const NetAddress& receiver, uint16_t port, void* data, size_t size)
|
|
|
{
|
|
{
|
|
|
- CE_ASSERT_NOT_NULL(data);
|
|
|
|
|
|
|
+ // CE_ASSERT_NOT_NULL(data);
|
|
|
|
|
|
|
|
- if (m_socket == 0)
|
|
|
|
|
- {
|
|
|
|
|
- return false;
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ // sockaddr_in address;
|
|
|
|
|
+ // address.sin_family = AF_INET;
|
|
|
|
|
+ // address.sin_addr.s_addr = htonl(receiver.address());
|
|
|
|
|
+ // address.sin_port = htons(port);
|
|
|
|
|
|
|
|
- sockaddr_in address;
|
|
|
|
|
- address.sin_family = AF_INET;
|
|
|
|
|
- address.sin_addr.s_addr = htonl(receiver.get_address());
|
|
|
|
|
- address.sin_port = htons(receiver.get_port());
|
|
|
|
|
-
|
|
|
|
|
- int32_t sent_bytes = sendto(m_socket, (const char*)data, size, 0, (sockaddr*)&address, sizeof(sockaddr_in));
|
|
|
|
|
|
|
+ // int sent_bytes = sendto(m_socket, (const char*)data, size, 0, (sockaddr*)&address, sizeof(sockaddr_in));
|
|
|
|
|
|
|
|
WriteResult result;
|
|
WriteResult result;
|
|
|
|
|
|
|
|
- if (sent_bytes < 0)
|
|
|
|
|
- {
|
|
|
|
|
- result.error = WriteResult::UNKNOWN;
|
|
|
|
|
- return result;
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ // if (sent_bytes < 0)
|
|
|
|
|
+ // {
|
|
|
|
|
+ // result.error = WriteResult::UNKNOWN;
|
|
|
|
|
+ // return result;
|
|
|
|
|
+ // }
|
|
|
|
|
|
|
|
- result.error = WriteResult::NO_ERROR;
|
|
|
|
|
- result.sent_bytes = sent_bytes;
|
|
|
|
|
|
|
+ // result.error = WriteResult::NO_RESULT_ERROR;
|
|
|
|
|
+ // result.sent_bytes = sent_bytes;
|
|
|
|
|
|
|
|
return result;
|
|
return result;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
//-----------------------------------------------------------------------------
|
|
|
- void UDPSocket::close()
|
|
|
|
|
|
|
+ void close()
|
|
|
{
|
|
{
|
|
|
- if (m_socket != 0)
|
|
|
|
|
- {
|
|
|
|
|
- ::close(m_socket);
|
|
|
|
|
- m_socket = 0;
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ // if (m_socket != 0)
|
|
|
|
|
+ // {
|
|
|
|
|
+ // ::closesocket(m_socket);
|
|
|
|
|
+ // m_socket = 0;
|
|
|
|
|
+ // }
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
//-----------------------------------------------------------------------------
|
|
|
- bool UDPSocket::is_open()
|
|
|
|
|
|
|
+ bool is_open()
|
|
|
{
|
|
{
|
|
|
return m_socket != 0;
|
|
return m_socket != 0;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+public:
|
|
|
|
|
+
|
|
|
|
|
+ int m_socket;
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
} // namespace crown
|
|
} // namespace crown
|