Chinaunix首页 | 论坛 | 博客
  • 博客访问: 690516
  • 博文数量: 192
  • 博客积分: 1875
  • 博客等级: 上尉
  • 技术积分: 2177
  • 用 户 组: 普通用户
  • 注册时间: 2010-10-23 23:21
个人简介

有时候,就是想窥视一下不知道的东东,因为好奇!

文章分类

全部博文(192)

文章存档

2024年(8)

2023年(3)

2020年(1)

2019年(1)

2018年(1)

2017年(2)

2016年(69)

2015年(53)

2014年(14)

2013年(1)

2012年(5)

2011年(25)

2010年(9)

分类: LINUX

2015-08-22 14:53:57

第十六章 socket的关闭
16.1 内核的关闭函数
        服务器调用close(server_fd)主动关闭socket
         最终在当前进程task_struct结构中通过文件号找到客户端socket的文件file, 文件结构的f_op指向文件函数表,如果存在就调用文件函数表的release()函数. 在初始化时被指定为sock_close()函数
        sys_close()-->filp_close()-->fput()-->__fput()-->sock_close()-->sock_fasync()
                                                                                                       -->sock_release()-->inet_release()-->tcp_close()-->inet_csk_listen_stop()-->tcp_disconnect()-->(递归)inet_csk_listen_stop()
                                                                                                                                                                                                                           -->inet_csk_destory_sock()-->tcp_v4_destory_sock()
                                                                                                                                                                                    -->tcp_disconnect()
        sock_release()释入服务器的socket和文件节点
        inet_csk_destory_sock()销毁客户端sock内容

16.2 服务器与客户端的共同关闭
        FIN到达客户端后,最终到达tcp_v4_do_rcv()
        tcp_rcv_established()-->tcp_data_queue()-->tcp_fin()
        tcp_rcv_established()-->tcp_ack_snd_check()-->__tcp_ack_snd_check()-->tcp_send_ack()-->
        tcp_send_ack()创建ACK数据包

        服务器通过tcp_v4_do_rcv()进入tcp_rcv_state_process()处理接收的ACK数据包. 
        tcp_v4_do_rcv()-->tcp_rcv_state_process()
        
阅读(830) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~