| Return Type | Function name | Arguments |
|---|---|---|
| hzEcode | hzUdpClient::Connect | (const hzString&,unsigned int,bool,) |
Declared in file: hzUdpClient.h
Defined in file : hzUdpClient.cpp
Function Logic:
Function body:
hzEcode hzUdpClient::Connect (const hzString& Hostname, unsigned int nPort, bool bLocal)
{
_hzfunc("hzUdpClient::Connect") ;
timeval tv ;
tv.tv_sec = 20;
tv.tv_usec = 0;
/*
** ** Initialize
** */
m_Hostname = Hostname ;
m_nPort = nPort ;
if (!Hostname)
{
hzerr(E_ARGUMENT, "Hostname not set") ;
return E_ARGUMENT ;
}
m_pHost = gethostbyname(*m_Hostname) ;
if (!m_pHost)
{
if (h_errno == TRY_AGAIN) return E_DNS_RETRY ;
if (h_errno == HOST_NOT_FOUND) return E_DNS_NOHOST ;
if (h_errno == NO_RECOVERY) return E_DNS_FAILED ;
if (h_errno == NO_DATA || h_errno == NO_ADDRESS)
return E_DNS_NODATA ;
hzerr(E_DNS_FAILED, "Could not resolve hostname") ;
return E_DNS_FAILED ;
}
if (m_nPort == 0)
{
hzerr(E_ARGUMENT, "Port not set") ;
return E_ARGUMENT ;
}
m_SvrLen = sizeof(m_SvrAddr) ;
/*
** ** Set up socket
** */
memset(&m_SvrAddr, 0,sizeof(m_SvrAddr)) ;
m_SvrAddr.sin_family = AF_INET ;
memcpy(&m_SvrAddr.sin_addr, m_pHost->h_addr, m_pHost->h_length) ;
m_SvrAddr.sin_port = htons(m_nPort) ;
if ((m_nSock = socket(AF_INET, SOCK_DGRAM, 0))< 0)
{
hzerr(E_NOSOCKET, "Could not create client socket") ;
return E_NOSOCKET ;
}
if (setsockopt(m_nSock, SOL_SOCKET, SO_SNDTIMEO, &tv, sizeof(tv)) < 0)
{
hzerr(E_NOSOCKET, "Could not set send timeout on UDP client socket") ;
return E_NOSOCKET ;
}
if (setsockopt(m_nSock, SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof(tv)) < 0)
{
hzerr(E_NOSOCKET, "Could not set recv timeout on UDP client socket") ;
return E_NOSOCKET ;
}
return E_OK ;
}