我用c ++编写程序来写入linux内核创建的原始套接字。据我了解,在用户空间中创建套接字的方法是调用系统调用:
socket(AF_INET, SOCK_RAW, IPPROTO_RAW);
。但是,由于某种原因,此函数返回的文件描述符始终为-1。但是,如果我将套接字类型指定为SOCK_STREAM,则似乎不会发生这种情况。我们将非常感谢您的一些见解。
答案 0 :(得分:3)
您的进程必须具有特权才能打开原始套接字。通过sudo
测试运行它。
一般情况下,当发生这种事情时,你应该检查错误代码;如果你有,你会看到失败的errno
电话将EACCESS
设置为socket
,告诉你需要知道的关于为什么电话的所有内容失败。