在服务器中使用close(fd)关闭服务器中的文件描述符后关闭客户端

时间:2016-01-13 09:36:23

标签: c tcp serversocket

如果客户端处于非活动状态(例如大约120秒),我有一个关闭服务器连接的方案。它的目的是我可以在一定时间不活动后重用fd。所以我写了一个代码来关闭文件描述符使用

 if ((int)time(NULL) - (int)value_data->timeout > 120)
        {

          zlog_warn(_c,"timeout of 120s for  device = %s",key);
          close(value_data->fd);

          g_hash_table_iter_remove (&iter);
          (*_collector_free_tcp_cache_cb)(value_data->device_ip, value_data->fd); 

          AFREE(value_data->device_ip);
          AFREE(value_data);



        }

使用close(fd),在服务器端关闭连接fd。我面临的问题是在下次连接客户端之后,服务器崩溃了。客户端无法发送数据。在查看tcp客户端时,它会提供Tcp所在的信息

TCP 192.168.2.138:50296->192.168.2.161:shell (CLOSE_WAIT)

如何再次发送下一个客户端的数据?是否有一些时间我需要等待,以便可以重复使用相同的fd来发送数据。?

0 个答案:

没有答案