2012-08-17 254 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);