a2s_cvar_parser/net.cpp
2018-08-14 01:21:54 +03:00

87 lines
No EOL
1.4 KiB
C++

#include "net.h"
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
struct sockaddr_in g_maddr;
class WSAInit
{
public:
WSAInit(){
WSAStartup(MAKEWORD(2,2),&m_WSA);
srand((unsigned int)time(NULL));
}
~WSAInit(){
WSACleanup();
}
WSADATA m_WSA;
} g_WSA;
CSocket::CSocket()
{
s = INVALID_SOCKET;
socklen = sizeof(struct sockaddr_in);
}
CSocket::CSocket(struct sockaddr_in& addr)
{
s = INVALID_SOCKET;
a = addr;
socklen = sizeof(struct sockaddr_in);
}
CSocket::~CSocket()
{
}
bool CSocket::InitSocket()
{
return ((s = socket(a.sin_family,SOCK_DGRAM,
IPPROTO_UDP)) != INVALID_SOCKET);
}
bool CSocket::Bind()
{
return (bind(s,(const sockaddr*)&a,
socklen)!= SOCKET_ERROR);
}
void CSocket::Close()
{
closesocket(s);
}
int CSocket::Recv(CSocket& cl,void* pBuf,size_t uSize,
DWORD dwTimeOut)
{
if(dwTimeOut)
{
setsockopt(cl.s,SOL_SOCKET,SO_RCVTIMEO,
(const char*)&dwTimeOut,sizeof(DWORD));
}
return recvfrom(s,(char*)pBuf,(int)uSize,0,
(sockaddr*)&cl.a,&cl.socklen);
}
int CSocket::Send(CSocket& cl,const void* pBuf,size_t uSize,
DWORD dwTimeOut)
{
if(dwTimeOut)
{
setsockopt(cl.s,SOL_SOCKET,SO_SNDTIMEO,
(const char*)&dwTimeOut,sizeof(DWORD));
}
return sendto(s,(const char*)pBuf,(int)uSize,0,
(const sockaddr*)&cl.a,cl.socklen);
}
void CSocket::SetNonBlocking(bool bEnable)
{
u_long uBlock = (u_long)bEnable;
ioctlsocket(s,FIONBIO,&uBlock);
}