关于tcp协议断开连接以及在socket编程时候连接的一些理解
2013-07-23 17:57
507 查看
要释放一个TCP连接,需要通过四次握手过程,这是由TCP的半关闭特性造成的,因为TCP连接时全双工的,因此,需要TCP两端要单独执行关闭。值得注意的是,主动关闭的一端在发送FIN之后,依然还能正常接收对方的数据,只是通知对方它已经没有数据需要发送了,同理,被动关闭的一端在收到FIN之后,仍然可以发送数据,直到它自身同样发出FIN之后,才停止发送数据。
TCP连接的超时问题:
完成一个TCP连接,中间涉及到一个超时的问题,大多数伯克利系统的超时时限为75s,Solaris9的超时时限为240s,因此,一般认为是在75-240之间。
【引申】在具体的实现中,如何由用户自己去完成设置socket连接超时时间?
【解决方法】目前实现socket超时连接主要是通过select来完成的。具体步骤如下:
◆ 建立socket
◆ 将socket设置为非阻塞模式(若是阻塞模式,那么时间设置就毫无意义)
◆ 调用connect去进行连接
◆ 使用select检查socket是否可写,并同时判断其结果(为什么是可写?因为需要检测socket是否收到ACK。)
◆ 将socket转化为阻塞模式
TCP的半关闭 所谓“半关闭”,是指连接的一端在结束它的发送之后还能接收到对方发过来的数据的能力。具体表现在,当完成三次握手的双方,其中有一端发出FIN,此时它将进入半关
闭状态,此时它关闭了自身的发送功能,但是它依然可以接收到对方的数据,如对方发过来的ACK消息
TCP连接的超时问题:
完成一个TCP连接,中间涉及到一个超时的问题,大多数伯克利系统的超时时限为75s,Solaris9的超时时限为240s,因此,一般认为是在75-240之间。
【引申】在具体的实现中,如何由用户自己去完成设置socket连接超时时间?
【解决方法】目前实现socket超时连接主要是通过select来完成的。具体步骤如下:
◆ 建立socket
◆ 将socket设置为非阻塞模式(若是阻塞模式,那么时间设置就毫无意义)
◆ 调用connect去进行连接
◆ 使用select检查socket是否可写,并同时判断其结果(为什么是可写?因为需要检测socket是否收到ACK。)
◆ 将socket转化为阻塞模式
TCP的半关闭 所谓“半关闭”,是指连接的一端在结束它的发送之后还能接收到对方发过来的数据的能力。具体表现在,当完成三次握手的双方,其中有一端发出FIN,此时它将进入半关
闭状态,此时它关闭了自身的发送功能,但是它依然可以接收到对方的数据,如对方发过来的ACK消息
相关文章推荐
- 关于socket编程中服务器端如何检测客户端连接断开的问题
- 关于Socket的编程以及信号量的进一步理解
- 关于Socket的编程以及信号量的进一步理解
- 关于Js OOP编程 创建对象的一些理解。
- 关于FFT的一些理解,以及如何手工计算FFT加深理解和验证正确性
- 转载_关于MTK socket编程的一些经验
- 关于android编程的curso对象 moveToNext()方法的一些理解
- 关于C#里面socket编程的一点理解
- 关于面对抽象编程的一些初步理解
- socket编程:客户端与服务器间的连接以及各函数的用法
- (一)关于socket编程的一些基础数据类型
- 关于socket 绑定过程中对地址初始化使用的htonl函数的一些理解(转载)
- 关于socket判断连接断开并重连
- python socket 编程之三:长连接、短连接以及心跳(转药师Aric的文章)
- 关于SocketAsyncEventArgs的一些理解
- socket使用TCP协议时,send、recv函数解析以及TCP连接关闭的问题
- 关于socket的一些个人理解
- 关于socket编程的一点心得理解
- Socket 编程经验谈---如何处理socket连接后服务器端或客户端的断开
- socket使用TCP协议时,send、recv函数解析以及TCP连接关闭的问题