为什么将套接字绑定到接口失败?

Why does binding socket to interface fail?

我正在尝试打开一个原始套接字并将我的无线接口绑定到它。这是我使用的代码:

//opening socket
if ((sockfd = socket(AF_PACKET, SOCK_RAW, htons(ETH_P_ALL))) == -1){
    //if socket fails give error
    perror("socket");
}

//binding socket to interface
if (setsockopt(sockfd, SOL_SOCKET, SO_BINDTODEVICE, "wlp0s19f2u3", 4) < 0)
    perror("SIOCGIFHWBIND");

但是在使用 sudo 编译和 运行 时,我得到一个 "SIOCGIFHWBIND: No such device"
我首先想到这是因为我错过了接口名称的拼写,但我的 iwconfig 输出是:

wlp0s19f2u3  IEEE 802.11  Mode:Monitor  Frequency:2.462 GHz  Tx-Power=20 dBm 

这不是监控模式的问题,因为 运行 当我的无线网卡处于托管模式时,代码提供相同的输出,我需要接口处于监控模式。
请帮忙,祝你有个愉快的一天!

感谢 Mark Setchell,原来 4 来自示例代码,他们使用了类似 "eth0" 的东西,它有 4 个字符。因此,用接口的 strlen() 替换 4 效果很好。再次感谢。