我看到了一段这样的代码,用于关闭套接字。
`//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
}`
我有三个问题:
答案 0 :(得分:3)
为什么需要关闭呼叫并关闭同时关闭套接字?
通常你没有。我知道的唯一例外是你继承了套接字,或子进程有,并且你想确保现在发送FIN。或者,如果您想与对等方进行FIN交换协议,以确保您同时到达流的末尾,这涉及关闭然后读取。不像上面那样。
这样可以避免TIME_WAIT状态吗?
没有
当关闭sockfd时,文件描述符仍然可用吗?
是