int netstatus_detect(char* hostname, int port, int count)
{
int ServerIP;
struct hostent hostent;
struct sockaddr_in server_addr;
int conn;
int iRet;
int timeout;
fd_set fdReadset;
fd_set fdWriteset;
if (NULL == hostname || port <= 0)
return -1;
hostent = gethostbyname(hostname);
if (NULL == hostent)
return -1;
ServerIP = inet_aton(hostent->h_addr_list[0]);
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = ServerIP;
server_addr.sin_port = htons(port);
int s = socket(AF_INET,SOCK_STREAM, 0);
if (s < 0)
return -1;
for (int i = 0; i < count; i++)
{
conn = connect(s, (struct sockaddr*)&server_addr, sizeof(server_addr));
if (conn == 0)
return 0;
if (errno == EINPROGRESS || errno == EWOULDBLOCK || errno == EALREADY)
return -1;
FD_ZERO(&fdReadset);
FD_ZERO(&fdWriteset);
FD_SET(s, &fdReadset);
FD_SET(s, &fdWriteset);
timeout = 10;
iRet = select(s+1, &fdReadset, &fdWriteset, NULL, timeout);
if (iRet == -1)
return -1;
else if (0 == iRet)
continue;
if (FD_ISSET(s, &fdWriteset))
{
if (FD_ISSET(s, &fdReadset))
return -1;
else
return 0;
}
}
}