Add socket library

This commit is contained in:
2019-12-25 14:42:58 +01:00
parent 78dd5366a0
commit fc65d4b146
38 changed files with 186 additions and 4 deletions

92
SocketLibrary/Socket.cpp Normal file
View File

@@ -0,0 +1,92 @@
#include "Socket.h"
#include "Log.h"
#include <assert.h>
namespace SocketLibrary
{
Socket::Socket(IPVersion ipversion, SOCKET socket)
:_ipversion(ipversion),_socket(socket)
{
assert(_ipversion == IPVersion::IPv4);
}
Result Socket::Create()
{
assert(_ipversion == IPVersion::IPv4);
if (_socket != INVALID_SOCKET)
{
return Result::Fail;
}
_socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (_socket == INVALID_SOCKET)
{
int error = WSAGetLastError();
Log::PrintError("Nie udalo sie utworzyc gniazda", error);
return Result::Fail;
}
Log::Print("Gniazdo zostalo utworzone.");
if (SetSocketOption(SocketOption::TCP_NoDelay, TRUE) == Result::Success)
{
Log::Print("NoDelay zostalo wlaczone na gniezdzie.");
}
return Result::Success;
}
Result Socket::Close()
{
if (_socket == INVALID_SOCKET)
{
Log::PrintError("Niemozna zamknac nieistniejacego gniazda.", -1);
return Result::Fail;
}
int result = closesocket(_socket);
if (result != 0)
{
int error = WSAGetLastError();
Log::PrintError("Nie udalo sie zamknac gniazda.", error);
return Result::Fail;
}
_socket = INVALID_SOCKET;
return Result::Success;
}
SOCKET Socket::GetSocket()
{
return _socket;
}
IPVersion Socket::GetIpVersion()
{
return _ipversion;
}
Result Socket::SetSocketOption(SocketOption option, BOOL value)
{
int result = 0;
switch (option)
{
case SocketOption::TCP_NoDelay:
result = setsockopt(_socket, IPPROTO_TCP, TCP_NODELAY, (const char*)&value, sizeof(value));
break;
default:
return Result::Fail;
}
if (result != 0)
{
int error = WSAGetLastError();
Log::PrintError("Nie mozna ustawic opcji dla gniazda.", error);
return Result::Fail;
}
return Result::Success;
}
}