易截截图软件、单文件、免安装、纯绿色、仅160KB

Linux 下TCP连接关闭情况分析

一、TCP连接关闭的几种方式:
1、“正常”关闭:调用close()关闭socket、没close但进程正常结束(当然这是不应该的做法)、进程core掉、在shell命令行中kill掉进程,都可抽象成“正常”关闭。因为即使core掉,内核也会马上帮应用程序回收(close)socket文件描述符。
     “正常”关闭,默认情况下(非默认即设置Linger下面会介绍),关闭端即客户端TCP层会发FIN包,对端即服务器TCP层收到后,回ACK,客户端进入FIN_WAIT2状态。此时,TCP终止连接的4个分组中服务器应该发的第3个分组FIN包,其TCP层是不会主动发的,只有服务器端socket“正常”关闭,才会发出这个FIN包。至此,客户端进入TIME_WAIT状态。
2、“非”正常关闭:客户端崩溃了,此时肯定发不出FIN包了(当然啦,内核都没机会帮应用程序回收资源了)。这种情况,服务器端有如下两种情况:
    A、服务器send数据,因为客户端已经崩溃,服务器收不到ACK自然会不停的重传。源自
        Berkeley的重传机制,重传8次,相对第一次传的15分钟后仍没收到ACK,则返回
        ETIMEDOUT或EHOSTUNREAC错误。如果服务器不理会这个错误,再次调用send,则
        立马返回Broken Pipe错误。    
       注:15分钟超时可以在 /proc/sys/net/ipv4/tcp_retries2 中修改
   B、 服务器不发任何数据了,那只有靠应用层心跳检测机制或Keepalive,来发觉TCP断连了。
二、SO_LINGER套接口选项
           A、l_onoff设置为0,这也是默认情况,函数close()是立即返回的,然后TCP连接双方是通过
                FIN、ACK4分组来终止TCP连接的。当然,发送缓冲区还有数据的话,系统将试着将这些数据
                发送到对方。
           B、l_onoff非0,l_linger设置0,函数close()立即返回,并发送RST终止连接,发送缓冲区的数据丢弃。
   &


相关文档:

[转帖]Linux驱动开发学习的一些必要步骤

 1. 学会写简单的makefile
2. 编一些应用
程序
,可以用makefile跑起来
3. 学会写驱动
的makefile
4. 写一简单char驱动,makefile编译通过,可以insmod, lsmod, rmmod. 在驱动的init函数里打印hello world,insmod后应该能够通过dmesg看到输出

5. 写一完整驱动, 加上read, write, ioctl, polling等� ......

Linux裸设备总结

原帖见http://www.inthirties.com/thread-685-1-1.html 
1、什么裸设备?字符设备?块设备? 
裸设备:也叫裸分区(原始分区),是一种没有经过格式化,不被Unix/Linux通过文件系统来读取的特殊字符设备。裸设备可以绑定一个分区,也可以绑定一个磁盘。 
字符设备:对字符设备的读写不需要通过OS的buffer ......

Linux Kernel Threads in Device Drivers

 Purpose
This examples shows how to create and stop a kernel thread.
The driver is implemented as a loadable module. In the init_module() routine five kernel threads are created. This kernel threads sleep one second, wake up, print a message and fall asleep again. On unload of the module (cle ......

[转]自己动手打造嵌入式Linux软硬件开发环境

      原文地址:http://www.xxlinux.com/linux/article/development/embed/20080227/14047.html
      Linux和uClinux
      Linux正逐渐地应用于嵌入式设备,uClinux正是在这种氛围下产生的。uClinux就是Micro-Control-Linux,它也是一个 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号