/* the name... */ int ReconnectSock(int sock, char *Host, int Port, int Flags) { int salen, result; struct sockaddr_in sa; struct hostent *hostdata; sa.sin_family=AF_INET; sa.sin_port=htons(Port); if (IsAddress(Host)) { inet_aton(Host, (struct in_addr *) &sa.sin_addr); } else { hostdata=gethostbyname(Host); if (!hostdata) { return(-1); } sa.sin_addr=*(struct in_addr *) *hostdata->h_addr_list; } salen=sizeof(sa); if (Flags & CONNECT_NONBLOCK) { fcntl(sock,F_SETFL,O_NONBLOCK); } result=connect(sock,(struct sockaddr *)&sa, salen); if (result==0) result=TRUE; if ((result==-1) && (Flags & CONNECT_NONBLOCK) && (errno == EINPROGRESS)) result=FALSE; return(result); }
int STREAMSendDgram(STREAM *S, char *Host, int Port, char *Bytes, int len) { struct sockaddr_in sa; int salen; struct hostent *hostdata; sa.sin_port=htons(Port); sa.sin_family=AF_INET; inet_aton(Host,& sa.sin_addr); salen=sizeof(sa); if (IsAddress(Host)) { inet_aton(Host, (struct in_addr *) &sa.sin_addr); } else { hostdata=gethostbyname(Host); if (!hostdata) { return(-1); } sa.sin_addr=*(struct in_addr *) *hostdata->h_addr_list; } return(sendto(S->out_fd,Bytes,len,0,(struct sockaddr *) &sa,salen)); }
CString CSocket::ResolveStr(const tchar* pszHost) { // Is already an IP address? if (IsAddress(pszHost)) return pszHost; in_addr addr; // Resolve host name. hostent* pHost = gethostbyname(T2A(pszHost)); if (pHost == nullptr) throw CSocketException(CSocketException::E_RESOLVE_FAILED, CWinSock::LastError()); memcpy(&addr, pHost->h_addr_list[0], pHost->h_length); return A2T(inet_ntoa(addr)); }