Hmm this is my attempt but it doesn't appear to be working :/ Says that the host is down even if it isn't.
Code:
int Host_Alive(arguments * args) {
args->serv.sin_addr.S_un.S_addr = inet_addr(args->sz_address);
args->serv.sin_family = AF_INET;
args->serv.sin_port = htons(args->port);
args->sockfd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
unsigned long iMode = 0;
ioctlsocket(args->sockfd, FIONBIO, &iMode); // put socket in non-blocking state
fd_set socket_set;
timeval timer;
socket_set.fd_array[0] = args->sockfd;
socket_set.fd_count = 1;
timer.tv_sec = args->timeout;
int ret = select(0, &socket_set, &socket_set, &socket_set, &timer);
if (!ret || ret == SOCKET_ERROR) {
printf("[!] Host %s:%d not alive!\n", args->sz_address, args->port);
free(args);
closesocket(args->sockfd);
return 0;
}
else
printf("[!] Host up!\n");
free(args);
closesocket(args->sockfd);
return 1;
}