static void test_io(void)

{

#ifndef _WIN32

/* socketpair(PF_UNIX) which does not exist on windows */



    int sv[2];

    int r;

    unsigned i, j, k, s, t;

    fd_set fds;

    unsigned niov;

    struct iovec *iov, *siov;

    unsigned char *buf;

    size_t sz;



    iov_random(&iov, &niov);

    sz = iov_size(iov, niov);

    buf = g_malloc(sz);

    for (i = 0; i < sz; ++i) {

        buf[i] = i & 255;

    }

    iov_from_buf(iov, niov, 0, buf, sz);



    siov = g_malloc(sizeof(*iov) * niov);

    memcpy(siov, iov, sizeof(*iov) * niov);



    if (socketpair(PF_UNIX, SOCK_STREAM, 0, sv) < 0) {

       perror("socketpair");

       exit(1);

    }



    FD_ZERO(&fds);



    t = 0;

    if (fork() == 0) {

       /* writer */



       close(sv[0]);

       FD_SET(sv[1], &fds);

       fcntl(sv[1], F_SETFL, O_RDWR|O_NONBLOCK);

       r = g_test_rand_int_range(sz / 2, sz);

       setsockopt(sv[1], SOL_SOCKET, SO_SNDBUF, &r, sizeof(r));



       for (i = 0; i <= sz; ++i) {

           for (j = i; j <= sz; ++j) {

               k = i;

               do {

                   s = g_test_rand_int_range(0, j - k + 1);

                   r = iov_send(sv[1], iov, niov, k, s);

                   g_assert(memcmp(iov, siov, sizeof(*iov)*niov) == 0);

                   if (r >= 0) {

                       k += r;

                       t += r;

                       usleep(g_test_rand_int_range(0, 30));

                   } else if (errno == EAGAIN) {

                       select(sv[1]+1, NULL, &fds, NULL, NULL);

                       continue;

                   } else {

                       perror("send");

                       exit(1);

                   }

               } while(k < j);

           }

       }




       exit(0);



    } else {

       /* reader & verifier */



       close(sv[1]);

       FD_SET(sv[0], &fds);

       fcntl(sv[0], F_SETFL, O_RDWR|O_NONBLOCK);

       r = g_test_rand_int_range(sz / 2, sz);

       setsockopt(sv[0], SOL_SOCKET, SO_RCVBUF, &r, sizeof(r));

       usleep(500000);



       for (i = 0; i <= sz; ++i) {

           for (j = i; j <= sz; ++j) {

               k = i;

               iov_memset(iov, niov, 0, 0xff, -1);

               do {

                   s = g_test_rand_int_range(0, j - k + 1);

                   r = iov_recv(sv[0], iov, niov, k, s);

                   g_assert(memcmp(iov, siov, sizeof(*iov)*niov) == 0);

                   if (r > 0) {

                       k += r;

                       t += r;

                   } else if (!r) {

                       if (s) {

                           break;

                       }

                   } else if (errno == EAGAIN) {

                       select(sv[0]+1, &fds, NULL, NULL, NULL);

                       continue;

                   } else {

                       perror("recv");

                       exit(1);

                   }

               } while(k < j);

               test_iov_bytes(iov, niov, i, j - i);

           }

        }






     }

#endif

}
static void test_io(void)

{

#ifndef _WIN32





    int sv[2];

    int r;

    unsigned i, j, k, s, t;

    fd_set fds;

    unsigned niov;

    struct iovec *iov, *siov;

    unsigned char *buf;

    size_t sz;



    iov_random(&iov, &niov);

    sz = iov_size(iov, niov);

    buf = g_malloc(sz);

    for (i = 0; i < sz; ++i) {

        buf[i] = i & 255;

    }

    iov_from_buf(iov, niov, 0, buf, sz);



    siov = g_malloc(sizeof(*iov) * niov);

    memcpy(siov, iov, sizeof(*iov) * niov);



    if (socketpair(PF_UNIX, SOCK_STREAM, 0, sv) < 0) {

       perror("socketpair");

       exit(1);

    }



    FD_ZERO(&fds);



    t = 0;

    if (fork() == 0) {

       



       close(sv[0]);

       FD_SET(sv[1], &fds);

       fcntl(sv[1], F_SETFL, O_RDWR|O_NONBLOCK);

       r = g_test_rand_int_range(sz / 2, sz);

       setsockopt(sv[1], SOL_SOCKET, SO_SNDBUF, &r, sizeof(r));



       for (i = 0; i <= sz; ++i) {

           for (j = i; j <= sz; ++j) {

               k = i;

               do {

                   s = g_test_rand_int_range(0, j - k + 1);

                   r = iov_send(sv[1], iov, niov, k, s);

                   g_assert(memcmp(iov, siov, sizeof(*iov)*niov) == 0);

                   if (r >= 0) {

                       k += r;

                       t += r;

                       usleep(g_test_rand_int_range(0, 30));

                   } else if (errno == EAGAIN) {

                       select(sv[1]+1, NULL, &fds, NULL, NULL);

                       continue;

                   } else {

                       perror("send");

                       exit(1);

                   }

               } while(k < j);

           }

       }




       exit(0);



    } else {

       



       close(sv[1]);

       FD_SET(sv[0], &fds);

       fcntl(sv[0], F_SETFL, O_RDWR|O_NONBLOCK);

       r = g_test_rand_int_range(sz / 2, sz);

       setsockopt(sv[0], SOL_SOCKET, SO_RCVBUF, &r, sizeof(r));

       usleep(500000);



       for (i = 0; i <= sz; ++i) {

           for (j = i; j <= sz; ++j) {

               k = i;

               iov_memset(iov, niov, 0, 0xff, -1);

               do {

                   s = g_test_rand_int_range(0, j - k + 1);

                   r = iov_recv(sv[0], iov, niov, k, s);

                   g_assert(memcmp(iov, siov, sizeof(*iov)*niov) == 0);

                   if (r > 0) {

                       k += r;

                       t += r;

                   } else if (!r) {

                       if (s) {

                           break;

                       }

                   } else if (errno == EAGAIN) {

                       select(sv[0]+1, &fds, NULL, NULL, NULL);

                       continue;

                   } else {

                       perror("recv");

                       exit(1);

                   }

               } while(k < j);

               test_iov_bytes(iov, niov, i, j - i);

           }

        }






     }

#endif

}
static void FUNC_0(void)

{

#ifndef _WIN32





    int VAR_0[2];

    int VAR_1;

    unsigned VAR_2, VAR_3, VAR_4, VAR_5, VAR_6;

    fd_set fds;

    unsigned VAR_7;

    struct iovec *VAR_8, *VAR_9;

    unsigned char *VAR_10;

    size_t sz;



    iov_random(&VAR_8, &VAR_7);

    sz = iov_size(VAR_8, VAR_7);

    VAR_10 = g_malloc(sz);

    for (VAR_2 = 0; VAR_2 < sz; ++VAR_2) {

        VAR_10[VAR_2] = VAR_2 & 255;

    }

    iov_from_buf(VAR_8, VAR_7, 0, VAR_10, sz);



    VAR_9 = g_malloc(sizeof(*VAR_8) * VAR_7);

    memcpy(VAR_9, VAR_8, sizeof(*VAR_8) * VAR_7);



    if (socketpair(PF_UNIX, SOCK_STREAM, 0, VAR_0) < 0) {

       perror("socketpair");

       exit(1);

    }



    FD_ZERO(&fds);



    VAR_6 = 0;

    if (fork() == 0) {

       



       close(VAR_0[0]);

       FD_SET(VAR_0[1], &fds);

       fcntl(VAR_0[1], F_SETFL, O_RDWR|O_NONBLOCK);

       VAR_1 = g_test_rand_int_range(sz / 2, sz);

       setsockopt(VAR_0[1], SOL_SOCKET, SO_SNDBUF, &VAR_1, sizeof(VAR_1));



       for (VAR_2 = 0; VAR_2 <= sz; ++VAR_2) {

           for (VAR_3 = VAR_2; VAR_3 <= sz; ++VAR_3) {

               VAR_4 = VAR_2;

               do {

                   VAR_5 = g_test_rand_int_range(0, VAR_3 - VAR_4 + 1);

                   VAR_1 = iov_send(VAR_0[1], VAR_8, VAR_7, VAR_4, VAR_5);

                   g_assert(memcmp(VAR_8, VAR_9, sizeof(*VAR_8)*VAR_7) == 0);

                   if (VAR_1 >= 0) {

                       VAR_4 += VAR_1;

                       VAR_6 += VAR_1;

                       usleep(g_test_rand_int_range(0, 30));

                   } else if (errno == EAGAIN) {

                       select(VAR_0[1]+1, NULL, &fds, NULL, NULL);

                       continue;

                   } else {

                       perror("send");

                       exit(1);

                   }

               } while(VAR_4 < VAR_3);

           }

       }




       exit(0);



    } else {

       



       close(VAR_0[1]);

       FD_SET(VAR_0[0], &fds);

       fcntl(VAR_0[0], F_SETFL, O_RDWR|O_NONBLOCK);

       VAR_1 = g_test_rand_int_range(sz / 2, sz);

       setsockopt(VAR_0[0], SOL_SOCKET, SO_RCVBUF, &VAR_1, sizeof(VAR_1));

       usleep(500000);



       for (VAR_2 = 0; VAR_2 <= sz; ++VAR_2) {

           for (VAR_3 = VAR_2; VAR_3 <= sz; ++VAR_3) {

               VAR_4 = VAR_2;

               iov_memset(VAR_8, VAR_7, 0, 0xff, -1);

               do {

                   VAR_5 = g_test_rand_int_range(0, VAR_3 - VAR_4 + 1);

                   VAR_1 = iov_recv(VAR_0[0], VAR_8, VAR_7, VAR_4, VAR_5);

                   g_assert(memcmp(VAR_8, VAR_9, sizeof(*VAR_8)*VAR_7) == 0);

                   if (VAR_1 > 0) {

                       VAR_4 += VAR_1;

                       VAR_6 += VAR_1;

                   } else if (!VAR_1) {

                       if (VAR_5) {

                           break;

                       }

                   } else if (errno == EAGAIN) {

                       select(VAR_0[0]+1, &fds, NULL, NULL, NULL);

                       continue;

                   } else {

                       perror("recv");

                       exit(1);

                   }

               } while(VAR_4 < VAR_3);

               test_iov_bytes(VAR_8, VAR_7, VAR_2, VAR_3 - VAR_2);

           }

        }






     }

#endif

}
static void FUNC_0(void)
{ #ifndef _WIN32
int VAR_0[2]; int VAR_1; unsigned VAR_2, VAR_3, VAR_4, VAR_5, VAR_6; fd_set fds; unsigned VAR_7; struct iovec *VAR_8, *VAR_9; unsigned char *VAR_10; size_t sz; iov_random(&VAR_8, &VAR_7); sz = iov_size(VAR_8, VAR_7); VAR_10 = g_malloc(sz); for (VAR_2 = 0; VAR_2 < sz; ++VAR_2) { VAR_10[VAR_2] = VAR_2 & 255; } iov_from_buf(VAR_8, VAR_7, 0, VAR_10, sz); VAR_9 = g_malloc(sizeof(*VAR_8) * VAR_7); memcpy(VAR_9, VAR_8, sizeof(*VAR_8) * VAR_7); if (socketpair(PF_UNIX, SOCK_STREAM, 0, VAR_0) < 0) { perror("socketpair"); exit(1); } FD_ZERO(&fds); VAR_6 = 0; if (fork() == 0) { close(VAR_0[0]); FD_SET(VAR_0[1], &fds); fcntl(VAR_0[1], F_SETFL, O_RDWR|O_NONBLOCK); VAR_1 = g_test_rand_int_range(sz / 2, sz); setsockopt(VAR_0[1], SOL_SOCKET, SO_SNDBUF, &VAR_1, sizeof(VAR_1)); for (VAR_2 = 0; VAR_2 <= sz; ++VAR_2) { for (VAR_3 = VAR_2; VAR_3 <= sz; ++VAR_3) { VAR_4 = VAR_2; do { VAR_5 = g_test_rand_int_range(0, VAR_3 - VAR_4 + 1); VAR_1 = iov_send(VAR_0[1], VAR_8, VAR_7, VAR_4, VAR_5); g_assert(memcmp(VAR_8, VAR_9, sizeof(*VAR_8)*VAR_7) == 0); if (VAR_1 >= 0) { VAR_4 += VAR_1; VAR_6 += VAR_1; usleep(g_test_rand_int_range(0, 30)); } else if (errno == EAGAIN) { select(VAR_0[1]+1, NULL, &fds, NULL, NULL); continue; } else { perror("send"); exit(1); } } while(VAR_4 < VAR_3); } } exit(0); } else { close(VAR_0[1]); FD_SET(VAR_0[0], &fds); fcntl(VAR_0[0], F_SETFL, O_RDWR|O_NONBLOCK); VAR_1 = g_test_rand_int_range(sz / 2, sz); setsockopt(VAR_0[0], SOL_SOCKET, SO_RCVBUF, &VAR_1, sizeof(VAR_1)); usleep(500000); for (VAR_2 = 0; VAR_2 <= sz; ++VAR_2) { for (VAR_3 = VAR_2; VAR_3 <= sz; ++VAR_3) { VAR_4 = VAR_2; iov_memset(VAR_8, VAR_7, 0, 0xff, -1); do { VAR_5 = g_test_rand_int_range(0, VAR_3 - VAR_4 + 1); VAR_1 = iov_recv(VAR_0[0], VAR_8, VAR_7, VAR_4, VAR_5); g_assert(memcmp(VAR_8, VAR_9, sizeof(*VAR_8)*VAR_7) == 0); if (VAR_1 > 0) { VAR_4 += VAR_1; VAR_6 += VAR_1; } else if (!VAR_1) { if (VAR_5) { break; } } else if (errno == EAGAIN) { select(VAR_0[0]+1, &fds, NULL, NULL, NULL); continue; } else { perror("recv"); exit(1); } } while(VAR_4 < VAR_3); test_iov_bytes(VAR_8, VAR_7, VAR_2, VAR_3 - VAR_2); } } } #endif
}