为什么系统调用套接字(AF_INET,SOCK_RAW,IPPROTO_RAW)返回-1的文件描述符?我相信这是一个错误

时间:2015-05-10 01:27:40

标签: c++ c sockets

我用c ++编写程序来写入linux内核创建的原始套接字。据我了解,在用户空间中创建套接字的方法是调用系统调用:

socket(AF_INET, SOCK_RAW, IPPROTO_RAW);

。但是,由于某种原因,此函数返回的文件描述符始终为-1。但是,如果我将套接字类型指定为SOCK_STREAM,则似乎不会发生这种情况。我们将非常感谢您的一些见解。

1 个答案:

答案 0 :(得分:3)

您的进程必须具有特权才能打开原始套接字。通过sudo测试运行它。

一般情况下,当发生这种事情时,你应该检查错误代码;如果你有,你会看到失败的errno电话将EACCESS设置为socket,告诉你需要知道的关于为什么电话的所有内容失败。