@@ -2921,7 +2921,6 @@ static enum net_verdict tcp_in(struct tcp *conn, struct net_pkt *pkt)
2921
2921
}
2922
2922
}
2923
2923
2924
- next_state :
2925
2924
len = pkt ? tcp_data_len (pkt ) : 0 ;
2926
2925
2927
2926
switch (conn -> state ) {
@@ -3091,8 +3090,6 @@ static enum net_verdict tcp_in(struct tcp *conn, struct net_pkt *pkt)
3091
3090
case TCP_ESTABLISHED :
3092
3091
/* full-close */
3093
3092
if (th && FL (& fl , & , FIN , th_seq (th ) == conn -> ack )) {
3094
- bool acked = false;
3095
-
3096
3093
if (len ) {
3097
3094
verdict = tcp_data_get (conn , pkt , & len );
3098
3095
if (verdict == NET_OK ) {
@@ -3106,25 +3103,16 @@ static enum net_verdict tcp_in(struct tcp *conn, struct net_pkt *pkt)
3106
3103
conn_ack (conn , + len + 1 );
3107
3104
keep_alive_timer_stop (conn );
3108
3105
3109
- if (FL (& fl , & , ACK )) {
3110
- acked = true;
3111
-
3112
- if (net_tcp_seq_cmp (th_ack (th ), conn -> seq ) > 0 ) {
3113
- uint32_t len_acked = th_ack (th ) - conn -> seq ;
3106
+ if (FL (& fl , & , ACK ) && (net_tcp_seq_cmp (th_ack (th ), conn -> seq ) > 0 )) {
3107
+ uint32_t len_acked = th_ack (th ) - conn -> seq ;
3114
3108
3115
- conn_seq (conn , + len_acked );
3116
- }
3109
+ conn_seq (conn , len_acked );
3117
3110
}
3118
3111
3119
- if (acked ) {
3120
- tcp_out (conn , FIN | ACK );
3121
- conn_seq (conn , + 1 );
3122
- tcp_setup_last_ack_timer (conn );
3123
- next = TCP_LAST_ACK ;
3124
- } else {
3125
- tcp_out (conn , ACK );
3126
- next = TCP_CLOSE_WAIT ;
3127
- }
3112
+ tcp_out (conn , FIN | ACK );
3113
+ conn_seq (conn , 1 );
3114
+ tcp_setup_last_ack_timer (conn );
3115
+ next = TCP_LAST_ACK ;
3128
3116
3129
3117
break ;
3130
3118
}
@@ -3316,10 +3304,7 @@ static enum net_verdict tcp_in(struct tcp *conn, struct net_pkt *pkt)
3316
3304
3317
3305
break ;
3318
3306
case TCP_CLOSE_WAIT :
3319
- tcp_out (conn , FIN | ACK );
3320
- conn_seq (conn , + 1 );
3321
- next = TCP_LAST_ACK ;
3322
- tcp_setup_last_ack_timer (conn );
3307
+ /* Half-close is not supported, so do nothing here */
3323
3308
break ;
3324
3309
case TCP_LAST_ACK :
3325
3310
if (th && FL (& fl , = = , ACK , th_ack (th ) == conn -> seq )) {
@@ -3586,8 +3571,6 @@ static enum net_verdict tcp_in(struct tcp *conn, struct net_pkt *pkt)
3586
3571
3587
3572
k_sem_give (& conn -> connect_sem );
3588
3573
}
3589
-
3590
- goto next_state ;
3591
3574
}
3592
3575
3593
3576
if (conn -> context ) {
0 commit comments