我的 IDE:xCode,OS X 10.10.4
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 中运行良好。
最佳答案
也许参数sizeof(bool)
返回无效值。正如您在以下链接中看到的,没有定义 sizeof(bool)
应传递 1。
我还认为您不必在函数调用中强制转换指针。只需要有 &
就足够了。
您能否提供一些sendto()
函数的代码来确定其他错误?
关于c++ - 将 SO_BROADCAST 设置为套接字失败,错误代码为 "Invalid argument",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34784584/