bool CSock::Create(int af, int type, int protocol)
{
m_sock = socket(af, type, protocol);
if (m_sock == INVALID_SOCKET)
return false;
else
return true;
}
bool CSock::Bind(UINT nProt, LPCTSTR lpAddress)
{
SOCKADDR_IN sockAddr;
memset(&sockAddr, 0, sizeof(sockAddr));
sockAddr.sin_family = AF_INET;
if (lpAddress == NULL)
sockAddr.sin_addr.s_addr = htonl(INADDR_ANY);
else
{
DWORD lResult = inet_addr((char *)lpAddress);
if (lResult == INADDR_NONE)
{
WSASetLastError(WSAEINVAL);
return FALSE;
}
sockAddr.sin_addr.s_addr = lResult;
}
sockAddr.sin_port = htons((u_short)nProt);
return bind(m_sock, (SOCKADDR*)&sockAddr, sizeof(sockAddr)) == 0;
}
int CSock::SendTo(const void *lpBuf, int nBufLen, DWORD dwDestIP, UINT nHostPort, int nFlags)
{
SOCKADDR_IN sockAddr;
memset(&sockAddr,0,sizeof(sockAddr));
sockAddr.sin_family = AF_INET;
sockAddr.sin_addr.s_addr = dwDestIP;
sockAddr.sin_port = htons((u_short)nHostPort);
return sendto(m_sock, (char *)lpBuf, nBufLen, nFlags, (SOCKADDR*)&sockAddr, sizeof(sockAddr));
}
int CSock::SendTo(const void *lpBuf, int nBufLen, LPCTSTR lpAddress, UINT nHostPort, int nFlags)
{
SOCKADDR_IN sockAddr;
memset(&sockAddr,0,sizeof(sockAddr));
sockAddr.sin_family = AF_INET;
if (lpAddress == NULL)
sockAddr.sin_addr.s_addr = htonl(INADDR_BROADCAST);
else
{
sockAddr.sin_addr.s_addr = inet_addr((char *)lpAddress);
if (sockAddr.sin_addr.s_addr == INADDR_NONE)
{
LPHOSTENT lphost;
lphost = gethostbyname((char *)lpAddress);
if (lphost != NULL)
sockAddr.sin_addr.s_addr = ((LPIN_ADDR)lphost->h_addr)->s_addr;
else
{
WSASetLastError(WSAEINVAL);
return SOCKET_ERROR;
}
}
}
sockAddr.sin_port = htons((u_short)nHostPort);
return sendto(m_sock, (char *)lpBuf, nBufLen, nFlags, (SOCKADDR*)&sockAddr, sizeof(sockAddr));
}
int CSock::ReceiveFrom(void *lpBuf, int nBufLen, DWORD &dwIP, UINT &rSocketPort, int nFlags)
{
SOCKADDR_IN sockAddr;
memset(&sockAddr, 0, sizeof(sockAddr));
int nSockAddrLen = sizeof(sockAddr);
int nResult = recvfrom (m_sock, (char *)lpBuf, nBufLen, nFlags, (SOCKADDR*)&sockAddr, &nSockAddrLen);
if(nResult != SOCKET_ERROR)
{
rSocketPort = ntohs(sockAddr.sin_port);
dwIP = sockAddr.sin_addr.S_un.S_addr;
}
return nResult;
}