gpt4 book ai didi

sockets - OS X 中的原始套接字 sendto() 失败

转载 作者:行者123 更新时间:2023-12-02 15:18:39 24 4
gpt4 key购买 nike

当我在 OS X 中打开原始套接字,构建自己的 udp 数据包( header 和数据)并调用 sendto() 时,我收到错误“无效参数”。这是来自网站 http://www.tenouk.com/Module43a.html 的示例程序“rawudp.c”这说明了这个问题。该程序(添加字符串和 stdlib #includes 后)在 Fedora 10 下运行,但在 OS X 下因“无效参数”而失败。任何人都可以建议为什么在 OS X 中失败?我看了又看又看了 sendto() 调用,但所有参数看起来都不错。我以 root 身份运行代码,等等。是否有一个内核设置可以阻止甚至 uid 0 可执行文件通过 OS X Snow Leopard 中的原始套接字发送数据包?谢谢。

最佳答案

我可能已经解开了这个谜团。我也制作了一个原始套接字示例,它在 Linux 上运行良好,但在 OS X 10.6 上出现“无效参数”错误。
我在谷歌搜索答案时遇到了这个页面“FreeBSD socket bugs and peculiarities”。它说:

Writing to RAW sockets


- ip_len and ip_off must be in host byte order

所以我替换

ip.ip_len = htons(len);

ip.ip_len = len;

在 OS X 上。不管它有多奇怪,它都能工作。

关于sockets - OS X 中的原始套接字 sendto() 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2438471/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com