c++ - 将 SO_BROADCAST 设置为套接字失败,错误代码为 "Invalid argument"

标签 c++ xcode

我的 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。

Is sizeof(bool) defined?

我还认为您不必在函数调用中强制转换指针。只需要有 & 就足够了。

您能否提供一些sendto()函数的代码来确定其他错误?

关于c++ - 将 SO_BROADCAST 设置为套接字失败,错误代码为 "Invalid argument",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34784584/

相关文章:

c# - 高斯模糊C#实现(类似OpenCV)

iphone - CKQueryOperation 获取最后一条记录

swift + Xcode : use osascript in Mac App

c++ - pthread_cond_wait() 之前的检查标志

c++ - 是否有任何功能可以知道键盘上的某个键是否被按下?

c++ - Visual C++ 2010/2012 的单独属性页

c# - 加载与引用 .NET DLL 位于同一文件夹中的引用 .NET DLL 时出现 "Not found"异常

ios - 如何强制 View Controller 保持纵向模式?

xcode - 导航 Controller 崩溃应用程序

c++ - 堆栈和队列在调试器中显示为空。苹果