/*
  Socks5 IPv4/IPv6    .

  :   BIND    SOCKS5_BIND_TIMEOUT .
*/
#pragma once

namespace Socks5Server
{
  /*
    .
  */
  void init(void);

  /*
    .
  */
  void uninit(void);
  
  /*
      Socks 4 (     ).
    
    IN s       - ,       .
    IN timeout -    , 0   .

    Return     - true -          ,
                 false -         .
  */
  bool _start5(SOCKET s, DWORD timeout);

  /*
      Socks 5 (     ).
    
    IN s       - ,       .
    IN timeout -    , 0   .

    Return     - true -          ,
                 false -         .
  */
  bool _start4(SOCKET s, DWORD timeout);

  /*
      Socks   .
    
    IN s       - ,      .
    IN timeout -    , 0   .

    Return     - true -          ,
                 false -         .
  */
  bool _start(SOCKET s, DWORD timeout);
};
