2016-01-14 27 views
1

我的IDE:Xcode中,OS X 10.10.4設置SO_BROADCAST一個套接字失敗,「無效參數」

int s = socket(AF_INET, SOCK_DGRAM, 0); 
bool bc = true; 
int ret = setsockopt(s, SOL_SOCKET, SO_BROADCAST, (const void*)&bc, sizeof(bool)); 
if(ret < 0){ 
    perror("set opt err:"); 
} 
sockaddr_in tarAddr; 
memset(&tarAddr, 0, sizeof(sockaddr_in)); 
tarAddr.sin_family = AF_INET; 
tarAddr.sin_port = htons(5000); 
tarAddr.sin_addr.s_addr = INADDR_BROADCAST; 

char szMsg[100] = {0}; 
strcpy(szMsg, "hello"); 

int len = sizeof(sockaddr); 
ret = sendto(s, szMsg, strlen(szMsg), 0, (sockaddr*)&tarAddr, len); 
if(ret < 0){ 
    perror("sendto err:"); 
} 
close(s); 

上面的代碼是關於發送UDP消息播出,但結果的信息是:

set opt err: Invalid argument 
sendto err: Permission denied 

和相同的代碼在vC++/windows中很好。

+1

第二個錯誤是第一個錯誤的結果 - 手冊頁將此錯誤描述爲「試圖發送到網絡/廣播地址,就像它是單播地址一樣」。 –

+1

'socket'函數可能會失敗,然後返回-1而不是描述符。你不檢查這個。嘗試檢查它。 –

回答

1

也許參數sizeof(bool)返回無效參數。正如你可以在下面的鏈接看到,它沒有定義sizeof(bool)應交付1

Is sizeof(bool) defined?

我也覺得你沒有投指針的函數調用。只有&就足夠了。

你能提供sendto()函數的一些代碼來確定其他錯誤嗎?

+0

http://linux.die.net/man/2/sendto –

相關問題