当前位置:  开发笔记 > 前端 > 正文

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

如何解决《OSX中的原始套接字sendto()失败》经验,为你挑选了1个好方法。

当我打开一个原始套接字是OS X,构建我自己的udp数据包(标头和数据),并调用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中的原始套接字发送数据包?谢谢.



1> Ted Feng..:

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

写入RAW套接字


- ip_len和ip_off必须按主机字节顺序排列

所以我更换

ip.ip_len = htons(len);

ip.ip_len = len;

在OS X上.它的工作原理有点奇怪.

推荐阅读
雨天是最美
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有