elwood.su

Just my blog

Курсач

with 3 comments

Сегодня неторопясь допинал свой курсач по ОСям. Задание, кстати, было весьма интересное, за мои 2.5 года в институте такое впервые ) А именно наваять чекер листов прокси, на нативных функциях Win32 и с применением многопоточности. Требования очень простые – на входе текстовик с HTTP проксиками, на выходе – такой же, но составленный только из работающих и отсортированный по возрастанию времени отклика + возможность определять, являются ли проверенные прокси транспарентными, либо все-таки скрывают истинный IP. Реализация не сложная, на C++ с использованием виндовых сокетов (сначала пробовал wininet, но оказалось, что он имеет нехорошую способность иногда намертво подвисать, причем поток после этого ведет себя неадекватно). Так что самым оптимальным решением, на мой взгляд, было использование winsock для работы с сокетами в неблокирующем режиме. Появилась возможность самим управлять таймаутом операции, а следовательно, и предотвратить случаи некорректной работы потоков.
При реализации обнаружил интересную задачу, связанную с функциями переменного числа аргументов. Вкратце, она сводилась к тому, чтобы написать свой переходник для printf(char *format, …) – с блекджеком и шлюхами, естественно, скажем, вида LogMessage(char *format, …) – так, чтобы внутренности этого переходника вызывали printf с теми же параметрами. Возможно, стоит написать об этом отдельный пост, а пока просто сообщу, что один способ я нашел и он лежит внутри. :) Не самое лучшее решение, опять же, но для сельской местности сойдет.

К сему прилагаются бинарники и исходники:
Download

Written by elwood

November 16th, 2008 at 2:56 am

Posted in С/C++,Учеба

3 Responses to 'Курсач'

Subscribe to comments with RSS or TrackBack to 'Курсач'.

  1. // csFormat – первый параметр твоей функции с n числом параметров
    // m_csBuffer – буфер, куда класть строку
    // dBufferSize – размер буфера

    va_list param_pt;
    va_start(param_pt, a_csFormat);

    _vsnprintf(m_csBuffer, m_dBufferSize, a_csFormat, param_pt);

    va_end(param_pt);

    тебе в руки)

    rz

    17 Dec 08 at 5:17 pm

  2. спасиб ) к этому как раз подойдет )
    только вот что делать, если на нужную функцию нет _vsn-аналога ?

    admin

    17 Dec 08 at 9:15 pm

  3. Ыы, боты плагин капчи пробили, обновляемся…

    Миха

    28 May 09 at 3:29 am

Leave a Reply