在Ubuntu上运行C++。 我用这种方式打开插座:如何关闭套接字
socket(AF_PACKET, SOCK_RAW, IPPROTO_RAW))
我需要什么,在使用的到底要干什么? 只要程序运行,就会使用一些套接字,我是否需要稍后检查它们?查看套接字是否仍然存在?
在Ubuntu上运行C++。 我用这种方式打开插座:如何关闭套接字
socket(AF_PACKET, SOCK_RAW, IPPROTO_RAW))
我需要什么,在使用的到底要干什么? 只要程序运行,就会使用一些套接字,我是否需要稍后检查它们?查看套接字是否仍然存在?
套接字一直存在,直到您在其文件描述符上调用close
。既然你有一个原始的IP套接字,就没有“活着”的概念。完成使用后请关闭它。
你可以请解释或给参考为什么在原始插座没有活着的概念 – 2012-08-17 12:57:26
@ user1495181:否 - *你*解释为什么那里*应该*是一个活着的概念。套接字只是让你发送和接收来自网络的数据。 (只有像TCP流套接字这样的专用套接字才具有活跃性的概念,因为它实现了连接语义,但是这是* IP之上的*) – 2012-08-17 13:00:16
在调用close之前更好地调用shutdown。 – kroiz 2013-11-18 08:26:39
正如其docs/man页面所说,socket()返回一个打开的文件描述符,如果失败则返回-1。这意味着你必须关闭它,因为你会关闭任何其他文件描述符:
close(sockfd);
@Ulterior你是如何得到501声誉不知道它的正确名称? – 2012-08-17 12:57:58
我是新来的这种低编程。请原谅我。我是java的家伙,不需要处理网络编程。 – 2012-08-17 12:58:17
@ H2CO3正式名称是什么? – Ulterior 2012-08-17 12:58:53