关闭并关闭一个套接字

时间:2016-11-03 01:59:59

标签: c network-programming unix-socket

我看到了一段这样的代码,用于关闭套接字。

`//a TCP socket is created: sockfd 
struct linger ling;
ling.l_onoff = 1;
ling.l_linger = 0;
setsockopt(sockfd, SOL_SOCKET, SO_LINGER, &ling, sizeof(ling));
......
//when need to close the socket
if(sockfd>0)
{
    shutdown(sockfd, SHUT_RDWR);
    close(sockfd);
}
else
{
    //some error message
}`

我有三个问题:

  1. 为什么需要关闭呼叫并关闭同时关闭套接字?从Wireshark,似乎将发送FIN,然后发送RST。
  2. 通过这种方式,可以避免TIME_WAIT状态吗?
  3. 当关闭sockfd时,文件描述符仍然可用?呼叫关闭功能时没有发生错误。

1 个答案:

答案 0 :(得分:3)

  

为什么需要关闭呼叫并关闭同时关闭套接字?

通常你没有。我知道的唯一例外是你继承了套接字,或子进程有,并且你想确保现在发送FIN。或者,如果您想与对等方进行FIN交换协议,以确保您同时到达流的末尾,这涉及关闭然后读取。不像上面那样。

  

这样可以避免TIME_WAIT状态吗?

没有

  

当关闭sockfd时,文件描述符仍然可用吗?