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中很好。
第二個錯誤是第一個錯誤的結果 - 手冊頁將此錯誤描述爲「試圖發送到網絡/廣播地址,就像它是單播地址一樣」。 –
'socket'函數可能會失敗,然後返回-1而不是描述符。你不檢查這個。嘗試檢查它。 –