TCP のクローズと TCP のアボートの違いは何ですか? 次に例を示します。
..//init the socket FD
while(1)
{
switch(socket_state)
{
case 0:
if(0 != FD)
{
tcp_connect(FD,rem_ip, 502, 0);
socket_state = 1;
break;
}
case 2:
if(TRUE == wait_ack)
{
return;
}
..//sending data
wait_ack = TRUE;
break;
case 3:
{
if(0 != FD)
{
tcp_close(FD); //or tcp_abort(FD);
tcp_release_socket(FD);
soc_state = 0;
}
}
break;
}
}
tcp_callback:
U16 Listener(U8 socket,U8 event,U8* ptr,U16 par)
switch(event)
{
case TCP_EVT_CONNECT:
soc_state = 2;
break;
case TCP_EVT_ACK:
wait_ack = __FALSE;
break;
case TCP_EVT_ABORT:
soc_state = 3;
break;
}
return (1);
ここで、サーバーをシャットダウンすると、クライアントはTCP_EVT_ABORT
メッセージを受け取り、 soc_state = 3
. while(1) ループで、switch はこれを確認し、ケース 3 に入ります。閉じるか、中止しますか? 次のループ反復では、状態 0 に戻ります。ファイル記述子がまだ 0 でないのはなぜですか? 中止または終了メカニズムを正しく使用するにはどうすればよいですか?