Skip to content

Commit e2cd437

Browse files
committed
Giant files size correct, but distoryed
1 parent 5018a73 commit e2cd437

File tree

5 files changed

+12
-10
lines changed

5 files changed

+12
-10
lines changed

go-back-n/gbn.c

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ void handle_alarm(int sig){
2222
* thus resending all paeckets in the window */
2323
printf("RETRY: %d\n",state.retry);
2424
if(state.retry<=5){
25-
state.seq_curr=state.seq_base+1;
25+
state.seq_curr=state.seq_base;
2626
state.retry++;
2727
state.win_size=1;
2828
state.seq_max=state.seq_base+state.win_size-1;
@@ -32,7 +32,7 @@ void handle_alarm(int sig){
3232
return;
3333
}
3434
signal(SIGALRM,handle_alarm);
35-
alarm(3);
35+
alarm(1.5);
3636
return;
3737
}
3838

@@ -53,11 +53,9 @@ ssize_t gbn_send(int sockfd, const void *buf, size_t len, int flags){
5353
state.seq_curr=1;
5454

5555
printf("PACKET COUNT: %d \n",packet_num);
56-
while(state.seq_curr<=packet_num+1){
56+
while(state.seq_curr<=packet_num){
5757
/*install alarm handler*/
5858
signal(SIGALRM,handle_alarm);
59-
if (state.seq_curr==N+1)state.seq_curr=1;
60-
state.seq_max=state.seq_base+state.win_size-1;
6159
gbnhdr *data_packet=malloc(sizeof(*data_packet));
6260
data_packet->type=DATA;
6361
data_packet->seqnum=state.seq_curr;
@@ -66,15 +64,18 @@ ssize_t gbn_send(int sockfd, const void *buf, size_t len, int flags){
6664

6765
state.seq_curr++;
6866
if(reset_alrm==true){
69-
alarm(3);
67+
alarm(1.5);
7068
reset_alrm=false;
7169
}
7270

7371
data_packet->checksum = checksum(data_packet, sizeof(*data_packet) / sizeof(uint16_t));
7472
printf("INFO: Checksum of packet: %d\n",data_packet->checksum);
7573

76-
if(state.seq_curr-1==packet_num && len%DATALEN>0)
77-
status=maybe_sendto(sockfd,data_packet,5+len%DATALEN,0,state.address,state.socklen);
74+
if(state.seq_curr-1==packet_num)
75+
if (len%DATALEN>0)
76+
status=maybe_sendto(sockfd,data_packet,5+len%DATALEN,0,state.address,state.socklen);
77+
else
78+
status=maybe_sendto(sockfd,data_packet,sizeof(*data_packet),0,state.address,state.socklen);
7879
else if(state.seq_curr-1<packet_num)
7980
status=maybe_sendto(sockfd,data_packet,sizeof(*data_packet),0,state.address,state.socklen);
8081

@@ -101,8 +102,8 @@ ssize_t gbn_send(int sockfd, const void *buf, size_t len, int flags){
101102
state.seq_base=packet->seqnum;
102103
reset_alrm=true;
103104
state.win_size=2;
105+
break;
104106
}
105-
break;
106107
}
107108
}
108109
}else return(-1);
@@ -140,7 +141,8 @@ ssize_t gbn_recv(int sockfd, void *buf, size_t len, int flags){
140141
if(state.seqnum == packet->seqnum){
141142
printf("INFO: Received DATA packet is in sequence.\n");
142143
memcpy(buf,packet->data,sizeof(packet->data));
143-
state.seqnum = packet->seqnum + 1;
144+
state.seqnum = packet->seqnum + 1;
145+
if (state.seqnum==N+1)state.seqnum=1;
144146
ack_packet->seqnum = state.seqnum;
145147
ack_packet->checksum = 0;
146148
is_seq = true;

go-back-n/gbn.o

16 Bytes
Binary file not shown.

go-back-n/r.test

1.92 MB
Binary file not shown.

go-back-n/receiver

0 Bytes
Binary file not shown.

go-back-n/sender

0 Bytes
Binary file not shown.

0 commit comments

Comments
 (0)