2012-08-17 129 views
4

在Ubuntu上运行C++。 我用这种方式打开插座:如何关闭套接字

socket(AF_PACKET, SOCK_RAW, IPPROTO_RAW)) 

我需要什么,在使用的到底要干什么? 只要程序运行,就会使用一些套接字,我是否需要稍后检查它们?查看套接字是否仍然存在?

+2

@Ulterior你是如何得到501声誉不知道它的正确名称? – 2012-08-17 12:57:58

+0

我是新来的这种低编程。请原谅我。我是java的家伙,不需要处理网络编程。 – 2012-08-17 12:58:17

+0

@ H2CO3正式名称是什么? – Ulterior 2012-08-17 12:58:53

回答

9

套接字一直存在,直到您在其文件描述符上调用close。既然你有一个原始的IP套接字,就没有“活着”的概念。完成使用后请关闭它。

+2

你可以请解释或给参考为什么在原始插座没有活着的概念 – 2012-08-17 12:57:26

+7

@ user1495181:否 - *你*解释为什么那里*应该*是一个活着的概念。套接字只是让你发送和接收来自网络的数据。 (只有像TCP流套接字这样的专用套接字才具有活跃性的概念,因为它实现了连接语义,但是这是* IP之上的*) – 2012-08-17 13:00:16

+2

在调用close之前更好地调用shutdown。 – kroiz 2013-11-18 08:26:39

4

正如其docs/man页面所说,socket()返回一个打开的文件描述符,如果失败则返回-1。这意味着你必须关闭它,因为你会关闭任何其他文件描述符:

close(sockfd);