На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Страницы: (2) [1] 2  все  ( Перейти к последнему сообщению )  
    > Проверка доступности хоста
      Есть ли какая асинхронная функция проверки доступности удаленного хоста по его api?
        Нету такого понятия, как api хоста. Удаленный хост может выполнять какую-то серверную функцию. Тогда его доступностью можно считать возможность подключения к серверному порту или выполнения какого-то запроса по соответствующему серверному протоколу. Опять же, надо понимать, что путь к удаленному хосту проходит через ряд маршрутизаторов, и невозможность подключения к нему из одной сети не означает, что хост не доступен из других.
        Сообщение отредактировано: UncleBob -
          connect на 80й порт и/или 443й если речь про вебсервер идет

          еще ping но тут без гарантии - могут игнорироваться запросы и не слаться ответы.
          если админ затейник то хост может быть но из вне никак про это не узнать
          Сообщение отредактировано: progman -
            Соглашусь с UncleBob. Более того, та сторона может игнорить все запросы, несовпадающие с заданным образцом (если используется UDP или иной connectionless-протокол), дропать ping и прочие ICMP-вещи, т.е. выглядеть как отсутствующая ровно до тех пор как угадаешь с форматом.

            Поэтому, надо бы больше деталей: какая задача решается? в каком контексте нужна проверка доступности?
              xbarmaglot
              объясни на пальцах чего надо, а то мужики здесь битву экстрасенсов устроили.
                Банальная задача: пропинговать хост. Только асинхронно.

                P.S. Есть железяка. Она может быть выдернута из сети. Нужно периодически ее опрашивать и понимать жива она или нет.
                Примеры из WinAPI синхроннве. Но это занимает много времени. Заводить отдельные потоки на несколько устройств крутовато...
                Нужно их периодически опрашивать и понимать отвалились ли они или нет. Поэтому хотелось бы асинхронных вызовов...
                  Что на железке крутится? Какой софт, какая ось? Можно ли как-то администрировать?
                    Mr.Delphist
                    в данном случае абсолютно плевать какая там железка.
                    Есть винда собственно, и в ней должен быть имплементирован код.
                    Есть туева хуча примеров пинга на рав сокетах. Но они блокирующие. Это правда.
                    Автор спрашивает как сделать их неблокирующими, собственно весь гамуз.
                      Насколько я понял, автору не с железки надо пинговать, а железку :whistle:

                      Пинг в потоке- не вижу криминала кстати, в любом случае он завершится через несколько секунд либо по приему ответа на пинг, либо по таймауту, сожрав ноль целых хрен десятых системных рксурсов :whistle:
                      Сообщение отредактировано: UncleBob -
                        Запустить ping.exe как дочерний процесс, его вывод направить к себе и парсить.
                        Ну и да, запускать это вовсе не обязательно в основном потоке - вполне будет жить и через дополнительный.
                          Цитата xbarmaglot @
                          Банальная задача: пропинговать хост. Только асинхронно.P.S. Есть железяка. Она может быть выдернута из сети. Нужно периодически ее опрашивать и понимать жива она или нет.Примеры из WinAPI синхроннве. Но это занимает много времени. Заводить отдельные потоки на несколько устройств крутовато...Нужно их периодически опрашивать и понимать отвалились ли они или нет. Поэтому хотелось бы асинхронных вызовов...

                          Об асинхронных (неблокируемых) сокетах автор знает?
                          Если необходим именно ping, т.е. ICMP то также делаешь неблокируемый сокет и все дела.
                            Цитата
                            Цитата (neokoder @ 44 минуты назад)
                            Об асинхронных (неблокируемых) сокетах автор знает?
                            Если необходим именно ping, т.е. ICMP то также делаешь неблокируемый сокет и все дела.

                            Что-то я не до конца видимо понимаю... :(
                            В описании этой функции IcmpSendEcho2
                            открытым текстом указан T-OUT.
                            Это означает, что сокеты используются не блокирующие.
                            ---
                            Дело в другом - принципиальной необходимости ждать ответа на пакет в течении некоторого времени.
                            Сообщение отредактировано: ЫукпШ -
                              Цитата neokoder @
                              Об асинхронных (неблокируемых) сокетах автор знает?

                              По большому счету асинхронные и неблокирующие сокеты - это несколько разные вещи. :)
                                Цитата ЫукпШ @
                                В описании этой функции IcmpSendEcho2
                                открытым текстом указан T-OUT.

                                Что такое T-OUT и где он указан?

                                Добавлено
                                Цитата Oleg2004 @
                                По большому счету асинхронные и неблокирующие сокеты - это несколько разные вещи.

                                В чём разные? :) Одно и тоже просто по-разному названо. Кто понимает о чём речь разницы между двумя этими понятиями в данном контексте этой темы делать не будет. Автор топика использовал слово асинхронно я его повторил, чтобы ему было понятнее. Но привёл также и второе название в принципе более правильное.

                                Добавлено
                                Цитата ЫукпШ @
                                Дело в другом - принципиальной необходимости ждать ответа на пакет в течении некоторого времени.

                                Ну так можно в 10 потоках ждать, если опрос 10 хостов, а можно и в одном все 10 запрjосов. Есть же разница, правильно? :)
                                  Цитата neokoder @
                                  В чём разные? :) Одно и тоже просто по-разному названо.

                                  Ну, начнем с того, что синхронных или блокирующих, или асинхронных сокетов - как таковых - не существует в природе. :)
                                  Сокет - в терминологии *nix - это в некотором виде файл - для чтения/записи.
                                  Файлов синхронных-асинхронных не бывает.
                                  И хотя такое название - блокирующий неблокирующий асинхронный - и применяется в сленге - на самом деле это неточность, вошедшая в привычку. Так просто проще говорить-писать :D
                                  Синхронной, неблокирующей или асинхронной - бывает только операция ввода/вывода, которая выполняется с данным сокетом.
                                  Так вот, блокирующая и неблокирующая операции выполняются с помощью одних и тех же блокирующих функций, например connect(), только при неблокирующей операции функция выполняется:
                                  а) в несвойственной для нее обстановке, что обязательно фиксируется передачей управления в программу с помощью возврата с ошибкой (причем конкретной для данной функции)!
                                  б)основная программа таким или иным образом сама ответственна за опрос результата исполнения
                                  По сути в основных ОС нет асинхронных функций, выполняющихся на сокете.
                                  И асинхронный сокет на самом деле это "псевдо асинхронный сокет"
                                  Например в Windows реальными асинхронными функциями являются только функции работы с сетевыми базами данных WSAAsyncGetXbyY, которые к сокетам никаким боком.
                                  Ну вот где-то так :)
                                  0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                  0 пользователей:


                                  Рейтинг@Mail.ru
                                  [ Script execution time: 0.0909 ]   [ 16 queries used ]   [ Generated: 17.06.26, 21:32 GMT ]