当我在 OS X 上打开原始套接字,构建自己的 udp 数据包(标头和数据)并调用 sendto() 时,我收到错误“无效参数”。这是网站上的示例程序“rawudp.c”http://www.tenouk.com/Module43a.html http://www.tenouk.com/Module43a.html这说明了这个问题。该程序(添加字符串和 stdlib #includes 后)在 Fedora 10 下运行,但在 OS X 下因“无效参数”而失败。任何人都可以解释为什么在 OS X 中会失败吗?我看了又看又看了 sendto() 调用,但所有参数看起来都不错。我以 root 身份运行代码,等等。是否有一个内核设置可以阻止甚至 uid 0 可执行文件通过 OS X Snow Leopard 中的原始套接字发送数据包?谢谢。
我可能已经解开了这个谜。
我也制作了一个原始套接字示例,它在 Linux 上运行良好,但在 OS X 10.6 上出现“无效参数”错误。
我遇到了这个页面“FreeBSD 套接字错误和特性 http://cseweb.ucsd.edu/%7Ebraghava/notes/freebsd-sockets.txt”,同时用谷歌搜索答案。它说:
写入 RAW 套接字
- ip_len 和 ip_off 必须采用主机字节顺序
所以我替换
ip.ip_len = htons(len);
with
ip.ip_len = len;
在 OS X 上。不管它有多奇怪,它都能工作。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)