2012-12-19 74 views
0

TCP關閉和TCP中止有什麼區別?以下是一個例子:RL_ARM的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)循環中,開關看到這個並進入case 3.我是否希望它關閉或中止?在下一次循環迭代中,我回到狀態0.爲什麼文件描述符仍然不是0? 如何正確使用中止或關閉機制?

+0

謝謝你的幫助! –

回答

0

有一點很難理解,當你使用tcp_get_socket,然後套接字分配和它的狀態是TCP_STATE_CLOSED。之後,用tcp_connect連接遠程server.Its狀態將改變爲TCP_STATE_SYN_REC。當連接建立後,狀態變爲TCP_STATE_CONNECT。當服務器端關閉時,客戶端將收到事件:TCP_EVT_ABORT。我使用tcp_release_socket關閉了當前插座。當數據發送完成時,使用這個函數關閉socket。下一次,我們應該調用tcp_get_socket之前tcp_connect與舊的套接字。簡而言之,每個連接,每個tcp_get_socket

相關問題