回答
嗯,我希望我有更多的时间来帮助你。
为了使UDP组播能够正常工作,它必须被烧入你的内核。您必须在配置内核时启用它。谷歌应该有更多的信息;我希望这能让你走上正轨。
-13是-EACCES。你有没有设置SO_BROADCAST?我相信sock_sendmsg返回-EACCES,如果SO_BROADCAST没有设置,并且你正在发送到广播地址。
您正在寻找< errno.h中>错误代码。
你正在开发什么内核版本?我想简单浏览一下内核源码。我没有看到-ENOPKG如何从sock_set返回,但我确实看到-ENOPROTOOPT可以返回(在内核2.6.27中是errno 92)。
噢 - 如果您愿意,可以在SO_BROADCAST设置的位置重新发布那一段代码。我没有记下它,我想再看一遍。
尝试使用SOL_UDP调用它。我认为这就是你要找的。我没有2.6.18的编译环境设置在任何地方玩这个,但是给我一个镜头。
不 - 从来没有 - 这不会做你想做的。我应该从源头上进一步阅读。我会继续寻找。这很有趣。
我想你可以只设置广播标志自己! 微笑
lock_sock(sock->sk);
sock->sk->broadcast = 1;
release_sock(sock->sk);
你难住我了,我得头去睡觉。我确实发现这些代码可能有些帮助,尽管这些人没有做广播。
http://kernelnewbies.org/Simple_UDP_Server
好luck--我希望我能解决它。
@adjuster ..
其实,我刚刚得到它。当我设置SO_BROADCAST
,我收到92(包未安装)
我应该安装什么软件包呢?
编辑:内核版本2.6.18是的,你是对的!92 ENOPROTOOPT
//Socket creation
sock_create(AF_INET, SOCK_DGRAM, IPPROTO_UDP, &sock);
//Broadcasting
int broadcast = 1;
int err;
if((err = sock->ops->setsockopt(sock, SOL_SOCKET, SO_BROADCAST, (char *)&broadcast, sizeof broadcast)) < 0)
{
printk(KERN_ALERT MODULE_NAME ": Could not configure broadcast, error %d\n", err);
return -1;
}
编辑:我从setsockopt
man page得到这个...
ENOPROTOOPT
的选项是在指定的层次不明。
...所以,我暗示SOL_SOCKET
是不正确的值传递。我也试过IPPROTO_UDP
而不是SOL_SOCKET
,没有运气。
编辑:http://docs.hp.com/en/32650-90372/ch02s10.html说SO_BROADCAST
是SOL_SOCKET
水平的一种选择,但我继续得到-92
编辑:我很绝望,所以我试图SOL_UDP
,仍-92。
是的,这很有趣:) ...良好的协同作用!最后(希望我们很快到达那里)让我们组装一个明确的答案,干净又好看! :)
编辑:即使硬盘设置广播标志,该sock_sendmsg
将失败(-13,拒绝 “权限”)
sock->sk->sk_flags |= SO_BROADCAST;
我真的需要在这一个有些帮助..
看那IPVS(Linux虚拟服务器)在Linux内核代码。它已经有了UDP多播的工作实现,它使用它来共享故障转移的连接状态。
已经夺去了看看这个,知道有些人谁这样做了,我真的建议更换创建netfilter的链接,并使用一个用户空间守护广播在网络上的信息。
对我下面的工作(所以最后这个线程可以被关闭)。
int yes = 1;
sock_setsockopt(sock, SOL_SOCKET, SO_BROADCAST, &yes, sizeof(yes));
sock->ops->connect(sock, (struct sockaddr *)&addr, sizeof(struct sockaddr), 0);
这里袜子是初始化结构插座和地址应当是结构SOCKADDR_IN在其广播地址。
- 1. 如何在Linux中使用C进行UDP广播?
- 2. 使用PHP进行UDP广播
- 3. iOS UDP广播与PHP UDP广播
- 4. Linux内核udp查找
- 5. 如何在UDP中进行部分广播?
- 6. 如何从Linux内核发送UDP数据包
- 7. UDP广播压力
- 8. UDP广播问题
- 9. UDP广播问题?
- 10. 收听UDP广播
- 11. boost :: asio UDP广播
- 12. UDP广播或IP多播?
- 13. 原始LWIP UDP广播
- 14. Android广播UDP循环
- 15. 在Java中的UDP广播
- 16. 本地UDP广播性能
- 17. java的UDP广播问题
- 18. 网络UDP广播设计?
- 19. (UDP)广播GVCP不正常
- 20. WinSock - UDP广播监听器
- 21. 使用IOS上的CFSocket进行UDP广播
- 22. 在C++中使用UDP进行多点广播
- 23. Android:进程内广播
- 24. AngularJs/.provider /如何让rootScope进行广播?
- 25. 使用KVM进行Linux内核开发
- 26. UDP单播比广播更可靠吗?
- 27. Linux内核进程管理
- 28. 如何从Linux内核克隆模块?
- 29. 如何在Linux上使用C/C++与ipv6 udp套接字进行组播?
- 30. 如何在Linux内核中进行乘法运算?
这是有效的用户和内核空间? 我可以在用户空间中播放,但不能在内核空间。 – 2008-12-06 20:18:31