2012-05-02 24 views
0

我想設置SCTP_MAX_BURST使用下面的代碼如何爲關聯設置SCTP_MAX_BURST?

struct sctp_assoc_value assocValue; 
memset(&assocValue, 0, sizeof(assocValue)); 
assocValue.assoc_value = getMaxBurstValue(); 
setsockopt (fd, IPPROTO_SCTP, SCTP_MAX_BURST, &assocValue, sizeof (assocValue)); 

當我執行的代碼,我收到以下錯誤: 「沒有這樣的文件或目錄」

誰能幫助我的可能原因爲失敗?

回答

0

您提到的文本(「沒有這樣的文件..」)是針對ENOENT,2的,它沒有在我有權訪問的任何Linux系統上列爲setsockopt的返回值。

在我的Redhat 5系統上,我找回了ENOPROTOOPT(errno 92),因爲內核沒有爲2.6.18的sctp實現該套接字選項。

+0

當我改變IPPROTO_SCTP到SOL_SOCKET,我沒有得到任何錯誤,我打包設置值,getsockopt也顯示我設置的任何值,但我不知道這是一個正確的方式setsockopt(FD, SOL_SOKCET,SCTP_MAX_BURST,&assocValue,sizeof(assocValue)); – jhon

+0

@jhon,根據RFC 6458,套接字必須是多對一的風格: int sock = socket(AF_INET,SOCK_SEQPACKET,IPPROTO_SCTP); 並且它是一個SCTP級別的選項 int rc = setsockopt(sock,IPPROTO_SCTP,SCTP_MAX_BURST,&assocValue,sizeof(assocValue)); 通過選擇不同的級別,您將獲得一個SOL_SOCKET級別的選項,它恰好與SCTP級別的枚舉具有相同的整數值。 –

+0

- 在RFC 6458中提到它必須有很多才能設置MAX_BURST?我試圖找出,但無法得到的? – jhon