#include #include #include #include #include #include #define host "192.168.2.3" #define port 8888 int f(struct in_addr *saddr, const char *data, const size_t data_len) { int sockfd; struct sockaddr_in addr; sockfd = socket(AF_INET, SOCK_STREAM, 0); if (sockfd < -1) { perror("socket"); return 1; } memset(&addr, 0, sizeof(addr)); addr.sin_family = AF_INET; addr.sin_port = htons(port); addr.sin_addr = *saddr; if (connect(sockfd, (struct sockaddr *)&addr, sizeof(addr))) { perror("connect"); return 1; } write(sockfd, data, data_len); close(sockfd); return 0; } int main(int argc, char **argv) { struct in_addr saddr; const char *data = "GET / HTTP/1.0\r\n\r\n"; const size_t data_len = strlen(data); if (argc != 2) { fprintf(stderr, "Usage: %s count\n", *argv); return 1; } if (!inet_aton(host, &saddr)) { perror("inet_aton"); return 1; } int count = atoi(argv[1]); const char dot = '.'; unsigned fails; while (--count >= 0) { if (!(count % 10)) { write(STDOUT_FILENO, &dot, sizeof(dot)); } if (f(&saddr, data, data_len)) { if (++fails > 10) break; } else fails /= 2; } putchar('\n'); return 0; }