我在我的用户空间应用程序中调用socket(),并获得错误,错误为errno = 1 = EPERM。 我不是root ..除了用sudo调用我的应用程序之外还有别的事吗?
这是代码:
if ((sock=socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL)))<0) { //error in socket() }
答案 0 :(得分:3)
这是因为想要使用SOCK_RAW
套接字的进程需要具有CAP_NET_RAW
功能或具有UID
零(root),来自手册页:
仅有效用户ID为0或CAP_NET_RAW的进程 允许功能打开原始套接字。