2015-06-02 2 views
-1

Все еще, имея проблемы с моим кодом.Как установить параметр сокета в C++ с помощью setsockopt

if (argc > 0) { 
int route (argc);//[argc+1] 
((char*) route)[0] = 1; 
((char*) route)[1] = 2;//131 
((char*) route)[2] = 3 + argc * 4; 
((char*) route)[3] = 4; 
for (int i = 0; i < argc; i++) { 
    route = inet_addr(argv[i]); 
} 

if (setsockopt(_socket.native_handle(), IPPROTO_IP, IP_OPTIONS, route, (argc + 1) * 4) < 0) { 
    perror("can't set socket option"); 
} 
} 

вот часть этого, продолжать получать эту C2664 ошибка: не удается преобразовать параметр 4 из «межд» до «сопзЬ символ *»

+0

Возможно, вы имели в виду 'argv', а не' argc'? 'argc' фактически представляет собой целочисленное значение, которое используется для указания количества аргументов presen string для функции' main() '. –

+1

Антон, в этом коде есть что-то не так, я бы посоветовал вам изучить некоторые обучающие программы * BEGINNER *. (Извините) – Amit

+0

@ πάνταῥεῖ хорошо, я поклонник этого, так что я немного смущен. если я ссылаюсь на argv там (argv + 1) - это дает мне еще одну ошибку, что я должен указать ro арифметический тип и bla bla bla –

ответ

0

реализация Microsoft о setsockopt() имеет const char* для четвертого варианта. POSIX usually has a const void*. Он должен указывать на буфер, содержащий значения. Последний аргумент - размер в байтах буфера.

Так что-то вроде этого:

setsockopt(
    _socket.native_handle(), IPPROTO_IP, IP_OPTIONS, 
    reinterpret_cast<char*>(&route), sizeof(int)); 

Я не достаточно о гнездах, чтобы сказать вам, является ли то, что вы передаете на самом деле имеет смысл знать. Here's the documentation on MSDN для IP_OPTIONS.

+0

Большое спасибо за помощь !! @isanae –

+1

Но я должен признать, что весь код перед вызовом 'setsockopt()' бессмысленен. – isanae

+0

да .. это то, что я тоже думаю .. @isanae –