tcp_poll回调函数自己关闭了tcp连接,lwip还会轮询调用回调函数吗
时间: 2023-08-15 19:08:28 浏览: 104
如果`tcp_poll`回调函数自己关闭了TCP连接,lwIP将不再继续轮询调用该回调函数。具体来说,当`tcp_poll`回调函数返回错误码`ERR_ABRT`时,lwIP会立即关闭TCP连接,并且不会再调用该回调函数。
因此,在`tcp_poll`回调函数中手动关闭TCP连接后,应用程序不必再处理该连接的任何事件。但是需要注意的是,应用程序需要确保在回调函数中手动关闭TCP连接时,不会出现资源泄漏或错误的情况。比如,在关闭TCP连接之前需要确保已经释放所有与该TCP连接相关的资源,如缓冲区、定时器等。
相关问题
lwip_tcp_server_connection_close可以在tcp_poll回调函数中调用吗
不建议在`tcp_poll`回调函数中调用`lwip_tcp_server_connection_close()`函数关闭TCP连接。因为,`tcp_poll`回调函数是在轮询过程中被调用的,它的执行时间是不确定的,可能会引起竞态条件,从而导致应用程序出现不可预期的错误。
通常情况下,建议在TCP连接关闭的事件处理函数中调用`lwip_tcp_server_connection_close()`函数。这些事件包括`ERR_RST`、`ERR_CLSD`、`ERR_ABRT`等。在这些事件中,lwIP已经关闭了TCP连接,并且不再轮询`tcp_poll`回调函数。
如果确实需要在`tcp_poll`回调函数中调用`lwip_tcp_server_connection_close()`函数,应该先停止轮询过程,然后再关闭TCP连接。具体来说,可以设置一个标志位或者调用`tcp_abort()`函数来停止TCP连接的轮询过程,然后在下一次轮询时关闭TCP连接。
总之,为了避免出现竞态条件和其他问题,建议在TCP连接关闭的事件处理函数中调用`lwip_tcp_server_connection_close()`函数,而不是在`tcp_poll`回调函数中调用。
tcp_poll回调函数返回错误后,是谁去关闭tcp连接
在`tcp_poll`回调函数中,如果返回错误码`ERR_ABRT`,lwIP将会关闭TCP连接。具体来说,lwIP会在下一个`tcp_output`或`tcp_input`函数被调用时,检测到`ERR_ABRT`错误码,并通过调用`tcp_abort()`函数来关闭TCP连接。`tcp_abort()`函数会释放所有与该TCP连接相关的资源并发送一个RST分节来终止连接。
因此,在`tcp_poll`回调函数中,如果返回`ERR_ABRT`错误码,lwIP会自动关闭TCP连接。但是,需要注意的是,如果在`tcp_poll`回调函数中返回其他错误码,如`ERR_MEM`等,lwIP不会自动关闭TCP连接,需要应用程序自己处理错误并关闭TCP连接。