diff --git a/desync.c b/desync.c index 515ae9e..258eac4 100644 --- a/desync.c +++ b/desync.c @@ -9,12 +9,14 @@ #include #include #include + #include #ifdef __linux__ #include #include #include - #include + + #include #ifdef MFD_CLOEXEC #include @@ -22,8 +24,6 @@ #else #define memfd_create(name, flags) fileno(tmpfile()) #endif - #else - #include #endif #else #include @@ -86,25 +86,24 @@ static inline void delay(long ms) void wait_send(int sfd) { for (int i = 0; params.wait_send && i < 500; i++) { - struct tcp_info tcpi = {}; + struct tcpi tcpi = {}; socklen_t ts = sizeof(tcpi); if (getsockopt(sfd, IPPROTO_TCP, TCP_INFO, (char *)&tcpi, &ts) < 0) { - perror("getsockopt TCP_INFO"); + uniperror("getsockopt TCP_INFO"); break; } - if (tcpi.tcpi_state != 1) { - LOG(LOG_E, "state: %d\n", tcpi.tcpi_state); + if (tcpi.state != 1) { + LOG(LOG_E, "state: %d\n", tcpi.state); return; } - size_t s = (char *)&tcpi.tcpi_notsent_bytes - (char *)&tcpi.tcpi_state; - if (ts < s) { + if (ts < sizeof(tcpi)) { LOG(LOG_E, "tcpi_notsent_bytes not provided\n"); params.wait_send = 0; break; } - if (tcpi.tcpi_notsent_bytes == 0) { + if (tcpi.notsent_bytes == 0) { return; } LOG(LOG_S, "not sent after %d ms\n", i); diff --git a/desync.h b/desync.h index 9e480e9..89989a6 100644 --- a/desync.h +++ b/desync.h @@ -1 +1,10 @@ ssize_t desync(int sfd, char *buffer, size_t bfsize, ssize_t n, ssize_t offset, struct sockaddr *dst, int dp_c); + +struct tcpi { + uint8_t state; + uint8_t r[3]; + uint32_t rr[5]; + uint32_t unacked; + uint32_t rrr[29]; + uint32_t notsent_bytes; +}; \ No newline at end of file