neclues lwip 的 bind、send 发送调用过程和等待唤醒条件

来源:互联网 发布:linux inode 耗尽解决 编辑:程序博客网 时间:2024/06/07 00:43

1、bind

bind
lwip_bind
netconn_bind
{
  msg.function = do_bind;
  msg.msg.conn = conn;
  msg.msg.msg.bc.ipaddr = addr;
  msg.msg.msg.bc.port = port;
  err = TCPIP_APIMSG(&msg);   ==>sys_arch_sem_wait(&apimsg->msg.conn->op_completed, 0);挂起
}
----------------------------------------
tcpip_thread
do_bind     TCPIP_APIMSG_ACK(msg);==> sys_sem_signal(&m->conn->op_completed); 唤醒
tcp_bind


2、send

send
lwip_send
netconn_write
{
  msg.function = do_write;
  msg.msg.conn = conn;
  msg.msg.msg.w.dataptr = dataptr;
  msg.msg.msg.w.apiflags = apiflags;
  msg.msg.msg.w.len = size;
}
----------------------------------------
tcpip_thread
do_write                                           
do_writemore(msg->conn);           err = TCPIP_APIMSG(&msg);==>sys_arch_sem_wait(&apimsg->msg.conn->op_completed, 0);
{
tcp_output
tcp_output_segment
ip_output
ip_output_if
netif->output
low_level_output
}


这也是一种积累吧,下次就可以直接回忆起来了!!!

0 0
原创粉丝点击