// Test internet connection using a root dns server ... shame ? :) #define RAYDIUM_NETWORK_INTERNET_TEST_HOST "198.41.0.4" #define RAYDIUM_NETWORK_INTERNET_TEST_PORT 53 signed char raydium_network_internet_test(void) { int sockfd; struct sockaddr_in serv_addr; struct hostent *server; struct timeval sv; int svlen; struct timeval timeout; fd_set writable; sockfd = socket(AF_INET, SOCK_STREAM, 0); server = gethostbyname(RAYDIUM_NETWORK_INTERNET_TEST_HOST); //server = gethostbyname("192.168.2.1"); memset(&serv_addr, 0, sizeof(serv_addr)); serv_addr.sin_family = AF_INET; memcpy(&(serv_addr.sin_addr.s_addr),server->h_addr,server->h_length); serv_addr.sin_port = htons(RAYDIUM_NETWORK_INTERNET_TEST_PORT); raydium_network_set_socket_block_internal(sockfd,0); // i'm tired of win32's sockets bad behaviours ... let's trust connect() ... connect(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)); FD_ZERO(&writable); FD_SET(sockfd, &writable); timeout.tv_sec=3; timeout.tv_usec=0; if (select(sockfd + 1, NULL, &writable, NULL, &timeout) == 0) { raydium_log("network: cannot contact remote server, no internet connection detected"); close(sockfd); return 0; // not writable } close(sockfd); return 1; // writable }