我打電話給我的用戶空間應用程序的套接字(),並得到一個錯誤,errno = 1 = EPERM。 我不是root ..除了使用sudo調用我的應用程序之外,還有其他事情要做嗎?socket()失敗 - errno EPERM - ubuntu
這是代碼:
if ((sock=socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL)))<0) { //error in socket() }
我打電話給我的用戶空間應用程序的套接字(),並得到一個錯誤,errno = 1 = EPERM。 我不是root ..除了使用sudo調用我的應用程序之外,還有其他事情要做嗎?socket()失敗 - errno EPERM - ubuntu
這是代碼:
if ((sock=socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL)))<0) { //error in socket() }
這是因爲這是想過程使用SOCK_RAW
插座需要或者具有CAP_NET_RAW
能力或者具有的UID
零(根),從該名男子頁:
只允許有效用戶ID爲0的進程或CAP_NET_RAW 功能才能打開原始套接字。
太棒了。所以我做了:$ sudo setcap cap_net_raw = ep ./my_app $。/ my_app 但是現在我在綁定這個套接字時遇到錯誤:socket(AF_UNIX,SOCK_DGRAM,0) – user1047069
很好。所以我做了:$ sudo setcap cap_net_raw = ep ./my_app $。/ my_app 但是現在我在綁定這個socket時出現錯誤:socket(AF_UNIX,SOCK_DGRAM,0)DGRAM需要綁定的功能是什麼? – user1047069
errno中設置了什麼錯誤?你是什麼意思的綁定(簡單地創建套接字或實際使用系統調用'綁定')?另外,你爲什麼從SOCK_RAW切換到SOCK_DGRAM(用於通過套接字接口發送數據報)? –
你能分享一些代碼嗎? – fritzone
你試圖打開什麼樣的套接字?你能發佈與你的問題相關的相關代碼嗎? –
如果它是一個UNIX類型的套接字,您可能缺少文件的讀/寫權限。 –