2017-12-09 2 views
0

에 소켓 SO_BINDTODEVICE를 설정할 수 없습니다 (우분투 16.04) 소켓에 결합 SO_BINDTODEVICE을 설정하는 것이,내가 리눅스에 출마 오래된 코드가 enp4s0

setsockopt(sout, SOL_SOCKET, SO_BINDTODEVICE,"enp4s0", 4); 

나는 새로운 우분투로 대상을 변경해야 17.10이고 오류로 인해 실패합니다. "No such device", 루프백 'lo'인터페이스를 사용하여이 대상에서 테스트했으며 작동합니다.

인터페이스

는 멀티 캐스트 플래그가

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 
2: enp4s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000 
    link/ether 00:0a:cd:21:ac:2a brd ff:ff:ff:ff:ff:ff 
3: enp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000 
    link/ether 30:9c:23:1c:b9:08 brd ff:ff:ff:ff:ff:ff 
4: enp0s31f6: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000 
    link/ether 30:9c:23:1c:b9:09 brd ff:ff:ff:ff:ff:ff 
22: [email protected]: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 500 
    link/ether 52:54:00:e4:5a:f8 brd ff:ff:ff:ff:ff:ff 
23: [email protected]: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 500 
    link/ether 52:54:00:a0:93:d0 brd ff:ff:ff:ff:ff:ff 

그것은 모든 인터페이스 그러나 보라 실패를 사용할 수 있습니다.

나는 장치 이름의 길이를 의심하기 때문에 17.04에서 테스트했으며 이름은 "eno0"이지만 wlp5s0 (wifi)는 작동하지 않습니다.

나는 어떻게 해결 해야할지 모르겠다. 너? 길이에 제한이 있습니까?

답변

1

잘못된 길이로 전달하기 때문에 더 긴 이름 길이에서는 작동하지 않습니다.

setsockopt의 마지막 인수는 네 번째 인수로 전달 된 옵션 값의 길이를 지정합니다. 이 옵션에 대해 4의 값을 전달하므로 문자열의 처음 4 바이트 만 보입니다.

setsockopt(sout, SOL_SOCKET, SO_BINDTODEVICE,"enp4s0", strlen("enp4s0")); 
+0

바보 나 :

은 문자열의 길이로 마지막 인자를 변경

! 감사합니다 – Mquinteiro

+0

@Mquinteiro 기꺼이 도와 드릴 수 있습니다. 유용하다고 생각되면 [이 대답 수락] (https://stackoverflow.com/help/accepted-answer)을 자유롭게 할 수 있습니다. – dbush