Вы проверяете код возврата ioctl(2)
неправильно. ioctl(2)
возвращает -1 при ошибке, не верно (не ноль). Поскольку ошибка не возвращается, значение в errno
не определено и вводит в заблуждение.
Следует читать:
if (ioctl(sockfd,SIOCGIWESSID, &wreq) == -1) {
fprintf(stderr, "Get ESSID ioctl failed \n");
fprintf(stderr, "errno = %d \n", errno);
fprintf(stderr, "Error description : %s\n",strerror(errno));
exit(2);
}
Редактировать: с этим неправильным кодом, вот что:
id = new char(IW_ESSID_MAX_SIZE+1);
Возможно, вы имели в виду:
id = new char[IW_ESSID_MAX_SIZE+1];
Первый выделил только один символ и устанавливает его значение IW_ESSID_MAX_SIZE+1
. Последний выделяет массив размером IW_ESSID_MAX_SIZE+1
.
С этим изменением код работает для меня и не выдает ошибку для ioctl.