Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.56/18: Рейтинг темы: голосов - 18, средняя оценка - 4.56
-41 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,915

Winsock - общие темы

26.11.2019, 20:04. Показов 4135. Ответов 26
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте,

Подскажите пожалуйста, почему при попытке создать структуру sockaddr_in6 VS2017 пишет, что:
C++
1
sockaddr_in6 идентификатор не определен
Хотя структура sockaddr_in без проблем создается.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.11.2019, 20:04
Ответы с готовыми решениями:

Темы из раздела С++ для экспертов и другие интересные темы
Раздел закрыт и темы перенеслись в раздел С++. Здесь находится список тем, которые были в разделе, чтобы они совсем не затерялись. ...

Форум на общие темы: есть ли перспективы?
Уважаемые форумчане! Есть форум с общей тематикой. Самым активным посетителям форума, будет предоставляться право создать свой,...

Ищу девушку программиста для общения на общие темы)
О себе брюнет 1,90, интересуюсь жизнью во всех ее проявлениях и формах. Буду рад общению) Добавлено через 1 минуту из великого...

26
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
06.12.2019, 23:48
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Optimus11 Посмотреть сообщение
Насколько я понимаю WSAGetLastError() сохраняет свое значение до следующей ошибки, то есть не обязательно сразу после inet_pton.
Ну как же вы так понимаете, когда вам английским по белому написали в документации:
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
WSAGetLastError should be called immediately.
Сделайте так:
C++
1
2
3
4
5
6
7
INT Result_inet_pton = inet_pton(AF_INET6, ip_a.c_str(), char_buuf_ip); // преобразовывает привычную запись ip в цифровую
 
DWORD lErr = WSAGetLastError();
 
cout << "INT Result_inet_pton:" << Result_inet_pton << endl;  // при некорректной записи ip возвращает ноль
 
cout << " WSAGetLastError():" << lErr << endl;  //
Внутри std::cout тоже могут быть операции, которые сбрасывают last error. Порядок вычисления операндов любых С++ операторов не определен.
1
-41 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,915
07.12.2019, 07:55  [ТС]
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
А inet_pton что возвращает?
inet_pton возвращает 0, то есть ошибку.
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
07.12.2019, 08:08
Цитата Сообщение от Optimus11 Посмотреть сообщение
inet_pton возвращает 0, то есть ошибку.
Ноль - значит некорректный адрес
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
А inet_pton что возвращает?
The InetPton function returns a value of 0 if the pAddrBuf parameter points to a string that is not a valid IPv4 dotted-decimal string or a valid IPv6 address string. Otherwise, a value of -1 is returned, and a specific error code can be retrieved by calling the
WSAGetLastError for extended error information.
1
-41 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,915
07.12.2019, 08:10  [ТС]
[QUOTE=DrOffset;14069524]
Сделайте так:
C++
1
2
3
4
INT Result_inet_pton = inet_pton(AF_INET6, ip_a.c_str(), char_buuf_ip); // преобразовывает привычную запись ip в цифровую
 
DWORD lErr = WSAGetLastError();
cout<<lErr<<endl;
Все равно 0.

Так как:
C++
1
2
3
Синтаксис
C ++
[B]int[/B] WSAGetLastError();
Сделал еще и так:
C++
1
2
int lErr = WSAGetLastError();
cout<<lErr<<endl;
И все равно 0.
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
07.12.2019, 08:13
Цитата Сообщение от Optimus11 Посмотреть сообщение
Все равно 0.
Если inet_pton вернул ноль, то в WSAGetLastError не будет ошибки
1
-41 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,915
07.12.2019, 08:14  [ТС]
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Ноль - значит некорректный адрес
Блин! Я как всегда был невнимательный!!!!!!!!! (((((((((((

C++
1
2
Функция InetPton возвращает значение 0, если параметр pAddrBuf указывает на строку, которая не является действительной точечно-десятичной строкой IPv4 или действительной адресной строкой IPv6. В противном случае возвращается значение -1, и конкретный код ошибки можно получить, вызвав
WSAGetLastError для расширенной информации об ошибке.
То есть функция WSAGetLastError вернет код ошибки, только в случае когда inet_pton Вернет -1, а не 0.

Извините пожалуйста.
0
-41 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,915
13.12.2019, 19:41  [ТС]
Снова здравствуйте,

Пытаюсь сделать connect к этому сайта, но через запись ip адреса в формате ipv6:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
sockaddr_in6 my_sockaddr_in6; // обьявим структуру sockaddr_in6;
 
string ip_v6 = "0000:0000:0000:0000:0000:ffff:b970:500e";   //запись в 128-битном формате 185.112.80.14 - cyberforum.ru
 
    my_sockaddr_in6.sin6_family = af_ipv6;
    my_sockaddr_in6.sin6_port = htons(my_port); 
    my_sockaddr_in6.sin6_flowinfo = 0; 
    my_sockaddr_in6.sin6_scope_id = 0; 
 
    INT Result_inet_pton_ipv6 = inet_pton(af_ipv6, ip_v6.c_str(), my_sockaddr_in6.sin6_addr.u.Byte);
 
    cout << "Result_inet_pton_ipv6: " << Result_inet_pton_ipv6 << " - если 1, то inet_pton успешен"<< endl;
    if (Result_inet_pton_ipv6 != 1)
    {
        cout << " WSAGetLastError():" << WSAGetLastError() << endl;
    }
и если вызвать функцию connect:
C++
1
2
3
4
5
6
7
int result_connect_ipv6 = connect(my_socket_ipv6, (sockaddr *)&my_sockaddr_in6, sizeof(my_sockaddr_in6));
 
    cout << "result_connect_ipv6: " << result_connect_ipv6 << " - если 0, то Connect успешен" << endl;
    if (result_connect_ipv6 != 0)
    {
        cout << "WSAGetLastError():" << WSAGetLastError() << endl;
    }
То возникает ошибка:
C++
1
2
3
4
5
WSAENETUNREACH
10051
 
Сеть недоступна.
Была предпринята попытка операции с сокетом в недоступной сети. Обычно это означает, что локальное программное обеспечение не знает маршрута для достижения удаленного хоста.
С одной стороны наверное понятно, что cyberforum работает на ipv4, но если в любом браузере ввести:
C++
1
0000:0000:0000:0000:0000:ffff:b970:500e
То браузер открывает этот сайт.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
13.12.2019, 19:41

Как рассчитать средние общие издержки, общие издержки, доход, прибыл предприятия?
Фирма производит 10 единиц продукции. Средние постоянные издержки равны 25 у. е., средние переменные – 35 у. е. Цена единицы продукции – 70...

Критерии переноса темы в раздел. Личные сообщения при перемещении темы.
Добрый день. я не могу понять по каким критериям темы сортируются в форуме 1с. вот я создал тему веб сервисы- веб сервисы - они...

В каком порядке учить темы C#, его фреймворки, прочие темы, чтобы я мог дойти до senior developer?
Я понял синтаксис С#, начал учить работу с WinForms а что дальше учить? В каком порядке двигаться если я хочу быть максимально прошаренным...

Рассчитать общие, предельные, средние постоянные, средние переменные и средние общие затраты предприятия
Задание 6. Рассчитать общие, предельные, средние постоянные, средние переменные и средние общие затраты предприятия, если известно, что...

WinSock
#include &quot;winsock2.h&quot; #define MAX_PACKET_SIZE 4096 WSADATA ws; hostent* hn; char buff ; if (FAILED (WSAStartup (MAKEWORD( 2,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
27
Ответ Создать тему
Новые блоги и статьи
Знаете, от чего появляется стресс?
kumehtar 15.07.2026
Стресс появляется оттого, что вы, зная как поступить правильно, делаете наоборот. Ларри Уингет
Нас бьют, а мы крепчаем? Какая чушь!
kumehtar 15.07.2026
Вот это вот бытующее мнение, что человек меняется только под действием проблем, всегда считал вредоносным. Поверь, от проблем у людей появляются не изменения, а нервное расстройство и ПТСР. А. . .
сукцессия 29. Переход от одних деревьев на другие делать более или менее вероятностным?
anaschu 12.07.2026
Насколько смена типов микоризы — исключительное событие в двухвековой сукцессии? Оценка вероятности в пространстве параметров В текущей версии модели успешно реализован ключевой механизм. . .
сукцессия 27. Думаю, как переделывать уже написанную статью с планами на сукцессию.
anaschu 12.07.2026
Анализ соответствия модели требованиям Реализованные компоненты: Механизм закисления почвы через протонную помпу Конкуренция между типами микориз pH как триггер сукцессии C/ P соотношение. . .
Сукцессия 26. Мат модель создана.
anaschu 12.07.2026
Модель смены растительных сукцессий посредством управления грибами работает внутри небольшой ячейки почвы, восстанавливающейся после пожара, где ненадолго бывшее царство хвойных снова захватили. . .
Решил проблему с ошибкой пагинации сообщений с сервера на алгоритме обхода дерева "Эстафета хвоста".
Hrethgir 12.07.2026
Проблема была в том, что удалялась именно новая кнопка, а не старая. Ни один ИИ не обнаружил это, а сам я смог только когда с работой стало попроще и когда заставил работать будущее автономное. . .
сукцессия 25. Хронология ошибок
anaschu 12.07.2026
# От 50-тонного гриба до устойчивого леса: хроника ошибок при построении модели вековой сукцессии микоризы ## О чём эта статья В процессе построения ОДУ-модели (система дифференциальных. . .
сукцессия 24. Промежуточное общее описание модели
anaschu 12.07.2026
Хендофф: модель АМ→ЭКМ сукцессии микоризы (ризосфера, 50 лет) Содержание проекта Симуляция вековой (50 лет) экологической сукцессии в почве леса Основные участники: АМ-гриб, ЭКМ-гриб,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru