2014-07-15 82 views
0

是的,我確實已經試着找到這方面的信息。插座類型之間的區別

Python的插座文檔有什麼,我相信是這樣的協議列表:

SO_* 
socket.SOMAXCONN 
MSG_* 
SOL_* 
IPPROTO_* 
IPPORT_* 
INADDR_* 
IP_* 
IPV6_* 
EAI_* 
AI_* 
NI_* 
TCP_* 

正是他們做什麼呢?比方說我用過

s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_IP) 

這是幹什麼用的?我知道這是一個原始套接字,但是IPPROTO_IP是否意味着我必須構建一切? (即IP頭向下到TCP數據?)

Python文檔說我可以在套接字的Unix文檔中找到上述信息,但找不到文檔。任何人都知道它在哪裏?

+0

是的,IPPROTO_IP的意思是原始IP,你可能不需要它。 (雖然你不需要構造IP頭,但只需要TCP頭。)至於文檔,請嘗試http://linux.die.net/man/7/socket。 – Sneftel

+0

非常感謝,非常感謝。那麼爲了確保,如果我使用了(IPPROTO_IP),這意味着任何IP協議必須由我構建?所以如果我使用TCP,我會構建TCP頭,UDP等...? – user3842825

+0

沒錯。另外,對於TCP,您必須實現自己的握手,確認,重傳等。 – Sneftel

回答

2

有很多的Linux手冊頁描述插座:

一般情況下,我們使用這些參數爲socket

  1. 地址族:AF_INET互聯網域名地址族,AF_UNIX用於UNIX域地址族。

  2. 套接字類型:用於TCP的SOCK_STREAM,用於UDP的SOCK_DGRAM。當然你可以使用SOCK_RAW直接訪問IP協議。

  3. 協議:使用TCP或UDP時,將其保留爲0就好了;當使用RAW時,可以將協議指定爲0,TCP套接字爲IPPROTO_TCP,UDP套接字爲IPPROTO_UDP。

而且,SO_指「套接字選項」,SOL_指「套接字選項級別」,其用於通過setsockopt設置套接字選項(在SOCKET也提到)。

實際上,您可以在SEE ALSO部分的這些頁面底部找到更多頁面。請注意,2或3的頁面是一個具體的系統調用或庫函數,7頁是您需要的。