setsockopt () для необработанного сокета fd не удалось

Я использую:

int syn_socket = (AF_INET, SOCK_RAW, IPPROTO_RAW);

создать сырая розетка, я имею корневая привилегия. А потом:

int on = 1;
int rc = setsockopt(syn_socket, IPPROTO_IP, IP_HDRINCL, &on, sizeof(on));

setsockopt возвращается -1, а также errno является EBADF, А вот и журнал:

[2016-12-05 11:02:34 UTC] [syn.cpp: 266] [syn] create raw
розетка (255)
[2016-12-05 11:02:34 UTC] [syn.cpp: 220] [
send_syn_packet] setsockopt (255) не удалось. (Ba d файловый дескриптор)
[
2016-12-05 11:02:34 UTC] [syn.cpp: 292] [син] отправить син
пакет не прошел.

1

Решение

int syn_socket = (AF_INET, SOCK_RAW, IPPROTO_RAW);

Как @DaV уже намекнул, это не звонит socket(), Слово socket отсутствует на этой линии. Он компилируется, потому что он все еще действителен C. Если вы напишите:

int a = (1, 2, 3);

Результатом является то, что a установлен на значение 3. Ваш syn_socket установлен в IPPROTO_RAW, что эквивалентно 255, что на самом деле, скорее всего, не является допустимым дескриптором.

Вам нужно позвонить socket():

int syn_socket = socket(AF_INET, SOCK_RAW, IPPROTO_RAW);
7

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]