MINIsocks 0.01

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by Gar|k, 14 Jul 2010.

  1. Gar|k

    Gar|k Moderator

    Joined:
    20 Mar 2009
    Messages:
    1,166
    Likes Received:
    266
    Reputations:
    82
    Задачи написать многопоточный сервер с поддержкой тысячи клиентов у меня не стояла (хотя я его тоже написал) была задача написать мааааленький сервачек под windows, который в дальнейшем думаю допилить напильником выкинуть от туда все что можно и юзать в зловредах.

    Сервак в скомпилированном виде весит 3 584 байта и на момент (6.04.2010) альфа версия держит соединение типа connect если адрес задается как host:port без авторизации (ибо тестировал я на rnq, а он подключается именно так хех)

    Запускать с консоли так: mini_socks5.exe port
    Останавливать Ctrl+Alt+Del и убивать в процессах

    Cпасибо SLESH-у за структурки и наставление на обработку туннеля через select и Hiro Protagonist-y за мотивацию )
    Жду осуждений и поправок кода ибо писал на коленке в нетбучек за паручасов.

    mini_socks5_0.01_src.rar - 4.68 Кб
    mini_socks5_0.01_bin.rar - 1.63 Кб
     
    _________________________
    #1 Gar|k, 14 Jul 2010
    Last edited: 15 Jul 2010
    4 people like this.
  2. Gar|k

    Gar|k Moderator

    Joined:
    20 Mar 2009
    Messages:
    1,166
    Likes Received:
    266
    Reputations:
    82
    2 Nightmarе - перезалил исходник, компилить лень, а вот UDP там нет.
    Скоро планирую полноценный сервер писать для одного проекта вот там и добавлю )
     
    _________________________
    1 person likes this.
  3. s0l_ir0n

    s0l_ir0n Active Member

    Joined:
    14 Mar 2009
    Messages:
    399
    Likes Received:
    143
    Reputations:
    18
    Гарик...привет...а все-таки турбо-паскаль рулит :p
     
  4. R0nin

    R0nin Member

    Joined:
    11 Jul 2010
    Messages:
    261
    Likes Received:
    24
    Reputations:
    8
    Ничего личнего, но там почти что ничего нету, целиком может 7-8кб кода, работа с простыми сокетами,имхо слишком маленький код и слишком элемнтарное дело, чтобы закидывать на публик,как уже сказал ничего личнего.
     
  5. Gar|k

    Gar|k Moderator

    Joined:
    20 Mar 2009
    Messages:
    1,166
    Likes Received:
    266
    Reputations:
    82
    R0nin маленький код потому что там ничего лиШнего ) а тут добрая часть форума вообще не слышала о сокетах и WinAPI )) а уж тем более, как запрограммировать туннель
     
    _________________________
  6. R0nin

    R0nin Member

    Joined:
    11 Jul 2010
    Messages:
    261
    Likes Received:
    24
    Reputations:
    8
    В этом ты абсолютно прав,я не раз утверждал, что тут 90% школьники, которым нефиг предложить.
     
  7. AlexTheC0d3r

    AlexTheC0d3r Elder - Старейшина

    Joined:
    25 Jul 2008
    Messages:
    388
    Likes Received:
    179
    Reputations:
    18

    не раз утверждал, и не разу не предложил :eek:
    Найти все темы с R0nin
     
  8. R0nin

    R0nin Member

    Joined:
    11 Jul 2010
    Messages:
    261
    Likes Received:
    24
    Reputations:
    8
    Пройди без подколов,ладно ?
    Если что, можешь посмотреть на количество своих и моих сообщений ;)
     
    #8 R0nin, 16 Jul 2010
    Last edited: 16 Jul 2010
  9. AlexTheC0d3r

    AlexTheC0d3r Elder - Старейшина

    Joined:
    25 Jul 2008
    Messages:
    388
    Likes Received:
    179
    Reputations:
    18
    та ничо, я не возражаю
    Gar|k, молодес
    Когда там на подходе твой псевдо-графический интерфейс???
     
  10. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,705
    Likes Received:
    1,225
    Reputations:
    455
    И вот пришел дядя слеш и начал чтото толкать по коду:
    1) _chkstk нафига? Тупо прибей проверку переполнений и жестко поставь размер стека который не будет проверяться. и тогда не придется юзать _chkstk. Если всётаки хочешь юзать его, то сделай импорт из стандартной виндовой msvcrt.dll которая есть везде по дефолту.
    2) SOCKET sock=INVALID_SOCKET; А смысл тратить инструкции кода на забивания знаения. если после функции socket оно по любому изменится
    3) addr.sin_addr.s_addr = 0; лучше юзать константы типа INADDR_ANY чтобы более наглядно было
    4) Sleep(50); // не отнимаем у проца ресурсы... и тем самым снижая пропускную способность до 273 килобайт в секунду для каждого клиента.
    Лучший всего в таких случаях юзать механизм типа такого:
    Если был обмен данными хоть на одном сокете, то паузу не делать. если небыло то делать. Механизм пашет отлично. Правдо когда 18r клиентов то сильно грузит проц.

    ну пока хватит. более подробно не смотрел.
    Небольшой совет. Сделай поддержку адерсации по IP тож полезная вешь. и кода пару строк. т.е. 3 строчки кода и небольшой юнион в структуру запроса
    ну и не забывай правильно отвечать клиенту по возникшим ошибкам. (проверка домена, коннекта, типа команды, типа адресации итд итп)
     
  11. Gar|k

    Gar|k Moderator

    Joined:
    20 Mar 2009
    Messages:
    1,166
    Likes Received:
    266
    Reputations:
    82
    _chkstk вылез при компиляции /GS- не помогло нихрена, а скока выделять под стек я не знаю, кто-то советовал мега большое значение.

    Про паузы спасибо ) как-то даже не подумал про такое )
     
    _________________________
  12. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,705
    Likes Received:
    1,225
    Reputations:
    455
    В параметрах компиляции ставь /GsXXXX
    где XXXX число в байтах.
    Можно его поставить чуть больше чем то, сколько занимают локальные переменные.
    Для тебя пойдет 8192 вроде как.
     
  13. greki_hoy

    greki_hoy Member

    Joined:
    4 Mar 2010
    Messages:
    326
    Likes Received:
    57
    Reputations:
    41
    только если поставиш /GsXXX больше 2 страниц
    и будеш писать такой код buff[0] = var; для
    буферов больше страницы размером то в опциях
    линкера при сборке укажи сразу рядом
    с пространством зарезервированным под стек и
    количество переданной сразу памяти стеку
    ставь тогда столько же сколько в /GsXXX
    написал иначе прога будет просто молча падать
    не сообщив об ошибке винда если видит что адрес
    невалидный в протранстве стека просто закрывает прогу по тихому