64,646
社区成员
发帖
与我相关
我的任务
分享
BOOL CTcpip::Tcp_ClientOpenInet(unsigned long ip, unsigned short port)
{
struct sockaddr_in server;
int rval;
unsigned long argp = 1;
struct timeval tv;
char errmsg[255];
fd_set fd;
fd_set readfd;
time_t t1, t2 ;
unsigned char * p;
memcpy(&(server.sin_addr), &ip, sizeof(server.sin_addr));
server.sin_port = htons(port);
server.sin_family = AF_INET;
clisock = socket(AF_INET, SOCK_STREAM, 0);
if (clisock < 0)
{
/* sockid == -1 */
sprintf(errmsg, "Client: socket() create. with error %d",
WSAGetLastError());
DebugLog(errmsg);
return FALSE;
}
ioctlsocket(clisock, FIONBIO, &argp);
FD_ZERO(&fd);
FD_ZERO(&readfd);
time(&t1) ;
t2 = t1 + 5 ;
while (WaitForSingleObject(gReadDataEvent, 30) != WAIT_OBJECT_0)
{
rval = connect(clisock, (struct sockaddr *) &server, sizeof(server)) ;
if (rval != 0)
{
FD_SET(clisock, &fd);
tv.tv_sec = 0; //gwcfg.timeout;
tv.tv_usec =5000L; //500000L;
FD_SET(clisock, &readfd);
tv.tv_sec = 0;
tv.tv_usec = 5000L;
if ((rval = select(0, &readfd, &fd, NULL, &tv)) <= 0)
{
if (rval == SOCKET_ERROR)
{
int Error = WSAGetLastError();
switch(Error)
{
case WSANOTINITIALISED:
break;
case WSAEFAULT: //currently ignore this condition
TRACE(_T("WARNING: MAX. Message Size exceeded\n"));
break;
case WSAENETDOWN:
break;
default:
{
TCHAR buffer[512];
wsprintf(buffer, _T("SendTo() returned %d"), Error);
}
break;
}
}
time(&t1) ;
if (t1 > t2)
{
/* time out */
closesocket(clisock);
p = (unsigned char *) &ip;
return FALSE ;
}
}
else
{
argp = 0; // none block
if (!AsyncMode)
ioctlsocket(clisock, FIONBIO, &argp);
return TRUE;
}
}
else
{
argp = 0; // none block
if (!AsyncMode)
ioctlsocket(clisock, FIONBIO, &argp);
return TRUE;
}
}
return FALSE;
#endif
}
BOOL CTcpip::Tcp_ClientOpenInet(unsigned long ip, unsigned short port)
{
struct sockaddr_in server;
int rval;
unsigned long argp = 1;
struct timeval tv;
char errmsg[255];
fd_set fd;
fd_set readfd;
time_t t1, t2 ;
unsigned char * p;
memcpy(&(server.sin_addr), &ip, sizeof(server.sin_addr));
server.sin_port = htons(port);
server.sin_family = AF_INET;
clisock = socket(AF_INET, SOCK_STREAM, 0);
if (clisock < 0)
{
/* sockid == -1 */
sprintf(errmsg, "Client: socket() create. with error %d",
WSAGetLastError());
DebugLog(errmsg);
return FALSE;
}
ioctlsocket(clisock, FIONBIO, &argp);
FD_ZERO(&fd);
FD_ZERO(&readfd);
time(&t1) ;
t2 = t1 + 5 ;
while (WaitForSingleObject(gReadDataEvent, 30) != WAIT_OBJECT_0)
{
rval = connect(clisock, (struct sockaddr *) &server, sizeof(server)) ;
if (rval != 0)
{
FD_SET(clisock, &fd);
tv.tv_sec = 0; //gwcfg.timeout;
tv.tv_usec =5000L; //500000L;
FD_SET(clisock, &readfd);
tv.tv_sec = 0;
tv.tv_usec = 5000L;
if ((rval = select(0, &readfd, &fd, NULL, &tv)) <= 0)
{
if (rval == SOCKET_ERROR)
{
int Error = WSAGetLastError();
switch(Error)
{
case WSANOTINITIALISED:
break;
case WSAEFAULT: //currently ignore this condition
TRACE(_T("WARNING: MAX. Message Size exceeded\n"));
break;
case WSAENETDOWN:
break;
default:
{
TCHAR buffer[512];
wsprintf(buffer, _T("SendTo() returned %d"), Error);
}
break;
}
}
time(&t1) ;
if (t1 > t2)
{
/* time out */
closesocket(clisock);
p = (unsigned char *) &ip;
return FALSE ;
}
}
else
{
argp = 0; // none block
if (!AsyncMode)
ioctlsocket(clisock, FIONBIO, &argp);
return TRUE;
}
}
else
{
argp = 0; // none block
if (!AsyncMode)
ioctlsocket(clisock, FIONBIO, &argp);
return TRUE;
}
}
return FALSE;
#endif
}