我有一段代码,它将ping命令作为更大代码的一部分来实现。
以下是该方案:
这是" socket"呼叫: sock = socket(IP_AF_INET,IP_SOCK_RAW,IP_IPPROTO_ICMP);
在调用recvfrom之前,套接字设置为1秒的超时值。 当ping失败时,我发现errno设置为EAGAIN。
我尝试了一些测试,我认为这是因为当按下Ctrl + C时套接字未被关闭。
我的问题是:如果我不像上述情况那样关闭套接字,我可以面对的问题是什么?
答案 0 :(得分:0)
单独使用Ctrl-C不会关闭任何内容 - 如果您的进程因此终止,则套接字将以与显式关闭套接字相同的方式关闭。
ICMP套接字有点特殊,因为你可以让任意数量的套接字监听相同的数据包,所以即使你没有关闭它们,这也不会影响其他ICMP套接字。
参与我的水晶球,我会说你打开很多插座,而不是关闭它们,一小时后,用完了文件描述符。只需重用已有的那个,并在不再需要ping任何人时关闭它。