回答
嗯,我希望我有更多的時間來幫助你。
爲了使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. 從Linux內核發送UDP數據包
- 6. 如何在UDP中進行部分廣播?
- 7. 如何區分UDP廣播和單播?
- 8. 如何從Linux內核發送UDP數據包
- 9. Java nio udp廣播
- 10. Firemonkey印UDP廣播
- 11. UDP多廣播nodejs
- 12. UDP廣播壓力
- 13. UDP廣播問題?
- 14. 迴應UDP廣播
- 15. boost :: asio UDP廣播
- 16. 接收UDP廣播
- 17. Android 3G UDP廣播
- 18. UDP廣播問題
- 19. 收聽UDP廣播
- 20. UDP廣播或IP多播?
- 21. 如何從Linux內核進行標準庫調用?
- 22. 網絡UDP廣播設計?
- 23. 原始LWIP UDP廣播
- 24. Android廣播UDP循環
- 25. iPhone UDP廣播和響應
- 26. 本地UDP廣播性能
- 27. C++發送UDP廣播
- 28. WinSock - UDP廣播監聽器
- 29. java的UDP廣播問題
- 30. 在Java中的UDP廣播
這是有效的用戶和內核空間? 我可以在用戶空間中播放,但不能在內核空間。 – 2008-12-06 20:18:31