2015-10-16 44 views
0

我想一個插座的接口綁定在我Linux.I應用程序中發現了一些代碼的東西here但是當我試圖用這個我得到-1作爲返回值從setsockopt的錯誤結合套接字網絡接口

這裏是我的示例代碼:

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#include <sys/socket.h> 
#include <sys/ioctl.h> 
#include <net/if.h> 
#include <arpa/inet.h> 
#include <netinet/in.h> 
#include "newfile.h" 


int main (int argc, const char* argv[]) 
{ 

scktfd = socket(AF_INET, SOCK_DGRAM, 0); 
char *opt; 
opt = "eth0"; 

struct ifreq Interface; 
memset(&Interface, 0, sizeof(Interface)); 
strncpy(Interface.ifr_ifrn.ifrn_name, "eth0", IFNAMSIZ); 

int rtrn; 
rtrn = setsockopt(scktfd, SOL_SOCKET, SO_BINDTODEVICE,&Interface, sizeof(Interface)); 

    return 0; 
} 

我試圖通過尋找其他的例子修改的代碼,但沒有奏效。可能是什麼問題。

+0

「我得到-1作爲setsockopt的返回值」好吧。但錯誤編號是什麼? –

+0

@ IgnacioVazquez-Abrams我如何檢查錯誤號 –

+0

@ IgnacioVazquez-Abrams我正在執行操作不允許錯誤 –

回答

2

在聊天中討論後,問題是該代碼未被運行爲root,正如TripeHound首先聲明的那樣。

任何人都不允許綁定到網絡接口(您可以監視程序/用戶網絡數據......),因此需要使用root或具有對設備的正確訪問權限的用戶。