From d3ed91a06898f69bcea899e4664a9bcddd3e382b Mon Sep 17 00:00:00 2001 From: sdemeesterde <samuel.demeester@student.uclouvain.be> Date: Sat, 9 Apr 2022 16:58:01 +0200 Subject: [PATCH] sender handle the window of receiver better --- src/packet_interface.h | 2 +- src/sender.c | 3 ++- src/sender_utils.c | 4 ++-- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/packet_interface.h b/src/packet_interface.h index 181dc94..7428389 100644 --- a/src/packet_interface.h +++ b/src/packet_interface.h @@ -68,7 +68,7 @@ typedef enum { #define TR_MASK 0x20 #define WINDOW_MASK 0x1F #define TR_SETTER_TO_ZERO 0xDF -#define SECOND_TO_LAST_PKT 0xFFFFFFFF // Use to specify it was the second to last pkt sent by the sender +#define SECOND_TO_LAST_PKT 0x3AB33922 // Use to specify it was the second to last pkt sent by the sender -> Need to be random ? #define TYPE_SHIFT 6 #define TR_SHIFT 5 diff --git a/src/sender.c b/src/sender.c index 4b81e0a..017f825 100644 --- a/src/sender.c +++ b/src/sender.c @@ -156,7 +156,8 @@ int main(int argc, char **argv) { } else if (can_send(state) && (pfd->revents & POLLOUT)) { - DEBUG("The sender will send a pkt on the socket, the current sender window size is: %d", state->s_window_size); + DEBUG("The sender will send a pkt on the socket, the current sender window size is: %d | receiver window size: %d", + state->s_window_size, state->r_window_size); rvalue = read_and_send(state, sending_fd, socket_fd); if (rvalue == -1) { diff --git a/src/sender_utils.c b/src/sender_utils.c index bdcdea1..27aed81 100644 --- a/src/sender_utils.c +++ b/src/sender_utils.c @@ -146,8 +146,8 @@ int handle_returning_ack_nack(sender_state_t *state, int socket_fd) } else { - DEBUG("The receiver is asking AGAIN, the seqnum: %d", seqnum_nack); - state->r_window_size = r_window; + DEBUG("The receiver is asking AGAIN, the seqnum: %d so the sender sends it back", seqnum_nack); + state->r_window_size = r_window - 1; // -1 Because the receiver doesn't count yet the sended pkt pkt_t *n_pkt = state->buffer[place_last_nack]; if (send_pkt(state, n_pkt, place_last_nack, socket_fd) == -1) return -1; return 0; -- GitLab