@ -78,6 +78,18 @@ static void link_rx_cb(struct ll_queue *q, void *arg) {
queue_resume_callback ( q ) ;
queue_resume_callback ( q ) ;
}
}
// ====== STCP close → link down ======
# include "etcp_connections.h"
static void stcp_link_on_stcp_close ( struct stcp_conn * conn , int err , void * arg ) {
struct stcp_link * link = ( struct stcp_link * ) arg ;
( void ) conn ; ( void ) err ;
link - > conn = NULL ; link - > ready = 0 ;
if ( link - > etcp_link ) { link - > etcp_link - > recv_keepalive = 0 ; link - > etcp_link - > link_status = 0 ; }
if ( link - > on_close_cb ) link - > on_close_cb ( link , err , link - > close_arg ) ;
}
// ====== server accept → link ======
// ====== server accept → link ======
static void server_accept_cb ( struct stcp_conn * conn , void * arg ) {
static void server_accept_cb ( struct stcp_conn * conn , void * arg ) {
@ -88,6 +100,8 @@ static void server_accept_cb(struct stcp_conn *conn, void *arg) {
link - > ready = 1 ;
link - > ready = 1 ;
link - > conn = conn ;
link - > conn = conn ;
stcp_conn_set_on_close ( conn , stcp_link_on_stcp_close , link ) ;
struct ll_queue * rx = queue_new ( conn - > ua , 0 , 0 , 0 , " srx " ) ;
struct ll_queue * rx = queue_new ( conn - > ua , 0 , 0 , 0 , " srx " ) ;
queue_set_callback ( rx , link_rx_cb , link ) ;
queue_set_callback ( rx , link_rx_cb , link ) ;
stcp_conn_set_rx_queue ( conn , rx ) ;
stcp_conn_set_rx_queue ( conn , rx ) ;
@ -108,6 +122,8 @@ static void client_ready_cb(struct stcp_conn *conn, void *arg) {
link - > ready = 1 ;
link - > ready = 1 ;
link - > conn = conn ;
link - > conn = conn ;
stcp_conn_set_on_close ( conn , stcp_link_on_stcp_close , link ) ;
struct ll_queue * rx = queue_new ( conn - > ua , 0 , 0 , 0 , " crx " ) ;
struct ll_queue * rx = queue_new ( conn - > ua , 0 , 0 , 0 , " crx " ) ;
queue_set_callback ( rx , link_rx_cb , link ) ;
queue_set_callback ( rx , link_rx_cb , link ) ;
stcp_conn_set_rx_queue ( conn , rx ) ;
stcp_conn_set_rx_queue ( conn , rx ) ;