gpt4 book ai didi

c - RL_ARM的TCP模式下close和abort的区别

转载 作者:行者123 更新时间:2023-11-30 17:55:48 34 4
gpt4 key购买 nike

TCP 的 close 和 TCP 的 abort 有什么区别?下面是一个例子:

..//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?如何正确使用中止或关闭机制?

最佳答案

有点难以理解,当你使用tcp_get_socket时,套接字被分配并且其状态为TCP_STATE_CLOSED。之后,使用tcp_connect > 连接远程服务器。其状态将更改为 TCP_STATE_SYN_REC。当连接建立时,状态变为 TCP_STATE_CONNECT。当服务器端关闭时,客户端将收到 EVENT : TCP_EVT_ABORT。我使用 tcp_release_socket 关闭当前套接字。另外,当数据发送完成后,使用此函数关闭套接字。下次,我们应该在使用旧套接字的tcp_connect之前调用tcp_get_socket。简而言之,每个连接,每个 tcp_get_socket

关于c - RL_ARM的TCP模式下close和abort的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13946334/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com