socket()失败 - 错误的EPERM - ubuntu

时间:2014-02-12 09:36:47

标签: c sockets ubuntu sudo

我在我的用户空间应用程序中调用socket(),并获得错误,错误为errno = 1 = EPERM。 我不是root ..除了用sudo调用我的应用程序之外还有别的事吗?

这是代码:

if ((sock=socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL)))<0) { //error in socket() } 

1 个答案:

答案 0 :(得分:3)

这是因为想要使用SOCK_RAW套接字的进程需要具有CAP_NET_RAW功能或具有UID (root),来自手册页:

  

仅有效用户ID为0或CAP_NET_RAW的进程   允许功能打开原始套接字。