Chinaunix

标题: tcp close 资源释放 [打印本页]

作者: bljswpu    时间: 2016-09-07 22:58
标题: tcp close 资源释放
  现有一个客户端和一个服务器,客户端一直往服务器发送数据,服务器不read数据,此时服务器的接受缓冲区已满,客户端的发送缓冲区也已满,客户端进入阻塞。如果此时直接退出进程,客户端会发给服务器发送一个rst包,客户端发送缓冲区的数据也丢掉了。如果是先close fd后再退出进程,客户端不会马上发送fin包,也不会发送rst包。客户端要等到服务器read data, 接受缓冲区有空间后,会把留在发送缓冲区的发送出去以后才会发送fin的包。那么问题来了,如果服务器一直不read data,那么客户端已close的这个socket什么时候才会给服务器发送fin包,释放资源呢?

作者: 流氓无产者    时间: 2016-09-08 09:30
see shutdown()
作者: bljswpu    时间: 2016-09-08 21:42
回复 2# 流氓无产者

试过了 shutdown照样要等发送缓冲区的数据全部发送完才会发fin包,还是有问题,如果服务器一直不读数据,客户端发送缓冲区的数据就不会发出去。那这个socket对应的资源什么时候释放呢。
作者: windoze    时间: 2016-09-20 21:41
所以你要用异步I/O+timeout。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2