socket setsockopt - Linux

Table of Contents

struct sockaddr_in client_addr;
bzero(&client_addr,sizeof(client_addr));
client_addr.sin_family = AF_INET;
client_addr.sin_addr.s_addr = htons(INADDR_ANY);
client_addr.sin_port = htons(0);
int client_socket = socket(AF_INET,SOCK_STREAM,0);

if(client_socket < 0)
{
printf("Create Socket Failed!\n");
exit(1);
}

struct ifreq interface;

//skfd = socket(AF_INET, SOCK_DGRAM, 0);
strncpy(interface.ifr_ifrn.ifrn_name, "eth0", IFNAMSIZ);
if (setsockopt(client_socket, SOL_SOCKET, SO_BINDTODEVICE,
(char *)&interface, sizeof(interface)+1) < 0) {
perror("sendpacket: setting SO_BINDTODEVICE");
exit(1);
}
/* if ( setsockopt(client_socket,SOL_SOCKET,SO_BINDTODEVICE,"wlan0",4) ==
-1 )
{
printf("Set Interface Card Failed!\n");
exit(1);
}*/
/* if(bind(client_socket,(struct
sockaddr*)&client_addr,sizeof(client_addr)))
{
printf("Client Bind Port Failed!\n");
exit(1);
}*/

struct sockaddr_in server_addr;
bzero(&server_addr,sizeof(server_addr));
server_addr.sin_family = AF_INET;
if(inet_aton(argv[1],&server_addr.sin_addr) == 0)
{
printf("Server IP Address Error!\n");
exit(1);
}
server_addr.sin_port = htons(REQUEST_SERVER_PORT);
socklen_t server_addr_length = sizeof(server_addr);

printf("Here...!\n");

if(connect(client_socket,(struct sockaddr*)&server_addr,
server_addr_length) < 0)
{
printf("Can Not Connect To %s!\n",argv[1]);
exit(1);
}

eth0 Link encap:Ethernet HWaddr 74:d0:2b:07:d1:e8
inet addr:140.117.89.78 Bcast:140.117.89.255 Mask:255.255.255.0
inet6 addr: fe80::76d0:2bff:fe07:d1e8/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:19560 errors:0 dropped:0 overruns:0 frame:0
TX packets:4755 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:3398106 (3.3 MB) TX bytes:574250 (574.2 KB)
Interrupt:43 Base address:0x2000

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:633 errors:0 dropped:0 overruns:0 frame:0
TX packets:633 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:83692 (83.6 KB) TX bytes:83692 (83.6 KB)

wlan0 Link encap:Ethernet HWaddr 6c:71:d9:5f:ea:5b
inet addr:192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::6e71:d9ff:fe5f:ea5b/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:2046 errors:0 dropped:0 overruns:0 frame:0
TX packets:304 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1276999 (1.2 MB) TX bytes:53934 (53.9 KB)


不知道為什麼我用setsockopt要指定wlan0的網卡傳送,
但是卻不行 在connect時,就會停下來

--

All Comments

Regina avatarRegina2015-09-24
setsockopt(...."wlan0",4) <== 明明 "wlan0" 有5個字元...
Anthony avatarAnthony2015-09-25
XDDDD
Oliver avatarOliver2015-09-29
我改成 5 還是一樣
Blanche avatarBlanche2015-10-02
用 root 身份跑這個程式的話情況如何?
Gary avatarGary2015-10-07
我記得指定介面的程式,需要有 root 身份權限才可以跑
一般程式用哪個介面就依據 routing table 來決定
Ivy avatarIvy2015-10-08
有用root耶
Yuri avatarYuri2015-10-11
所謂 "在connect時,就會停下來" 是說卡在 connect(),
Harry avatarHarry2015-10-15
還是connect()傳回負值,顯示"Can Not Connect To"...後結束?
Franklin avatarFranklin2015-10-19
卡在connect
Emily avatarEmily2015-10-22
那再多等 3~10分鐘, 通常應該會得到 ETIMEDOUT 而結束 :P
Genevieve avatarGenevieve2015-10-26
只是, 問題再於, 你 connect 到哪, 且期望得到什麼結果?
Agnes avatarAgnes2015-10-30
設成non-block用select等timeout如何?
Joseph avatarJoseph2015-10-31
connet到server ip address
Franklin avatarFranklin2015-11-03
你接著要思考的是,wlan0是否有路由到server ip address,
以及server是否有路由可回到你的wlan0.
Hedda avatarHedda2015-11-03
呃,原PO之後的 #1M11fnL5 (Linux) 那一篇似乎是此問題的延續?
Cara avatarCara2015-11-06
好像是樓上說到的問題,