SA、
ソケットを作成し、アクセスポイントからデータとログを受信しようとしていますが、シェルから実行するとコードは正しく機能していました。ただし、コマンドを実行してexecvpを使用してコードからAPに接続しようとすると
sudo iwconfig wlan0 essid "access point name"
コードからもシェルからもrecv関数が機能しなくなったため、このコマンドを実行すると一部の設定が変更されたようですが、正確に何が変更されたかはわかりません
それが私がソケットを作成する方法です
memset(&proc_addr, 0, sizeof(struct sockaddr_nl));
proc_addr.nl_family = AF_NETLINK;
proc_addr.nl_pid = getpid();
proc_addr.nl_groups = CN_IDX_IWLAGN;
if (bind(sock_fd, (struct sockaddr *)&proc_addr, sizeof(struct sockaddr_nl)) == -1)
exit_program_err(-1, "bind");
{
int on = proc_addr.nl_groups;
ret = setsockopt(sock_fd, 270, NETLINK_ADD_MEMBERSHIP, &on, sizeof(on));
if (ret)
exit_program_err(-1, "setsockopt");
}
while (1)
{
/* Receive from socket with infinite timeout */
printf("trying to receive");
ret = recv(sock_fd, buf, sizeof(buf), 0);
printf("received");
}
したがって、APからデータにpingを実行することはできますが、受信しようとするだけで印刷され、その後は何も出力されません。
execvpコード:
string cmd1_connect = "sudo iwconfig wlan0 essid ciscosb_3";
string cmd_check = "sudo dhclient wlan0";
string cmd2_connect = "sudo iwconfig wlan0 essid Cisco13-guest";
while(true) {
if(stream1) {
shell->runcmd(&m, &cmd1_connect);
shell->runcmd(&m, &cmd_check);
} else {
shell->runcmd(&m, &cmd2_connect);
shell->runcmd(&m, &cmd_check); }