Я учусь работать с необработанными сокетами в Linux. Я пытаюсь создать сокет так:
if ((sd = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP)) < 0) {
perror("socket() failed");
exit(-1);
}
Но все, что я получил после запуска:
сокет () не выполнен: операция не разрешена
Я знаю, что только root может создавать необработанные сокеты, но если я запускаю его с битом SUID или sudo -
проблема та же. В чем дело? Система Ubuntu 11.04.
Может быть, я включаю ненужные заголовки?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/ip.h>
#include <netinet/ip_icmp.h>
#include <netdb.h>
#include <sys/time.h>
#include <signal.h>
#include <unistd.h>
И мне интересно - почему SUID бесполезен?