anchor.diff:  
   end;
   
  +procedure TDiocpUdp.LogMessage(pvMsg: string; pvMsgType: string = ''; pvLevel:
  +    TLogLevel = lgvMessage);
  +begin
  +  sfLogger.logMessage(pvMsg, pvMsgType, pvLevel);
  +end;
  +
  +procedure TDiocpUdp.LogMessage(pvMsg: string; const args: array of const;
  +    pvMsgType: string = ''; pvLevel: TLogLevel = lgvMessage);
  +begin
  +  sfLogger.logMessage(pvMsg, args, pvMsgType, pvLevel);
  +end;
  +
   procedure TDiocpUdp.RegisterSessionClass(pvClass:TDiocpUdpSessionClass);
   begin
     FSessionClass := pvClass;
  
positive.code: uses
    diocp.core.engine, Classes, SysUtils, diocp.core.rawWinSocket,
    diocp.winapi.winsock2, SyncObjs, Windows, utils.locker, utils.queues,
    utils.hashs;
  
  type
    /// <summary>
  
negative.code: begin
    FEnable := true;
    FRawSocket.CreateUdpOverlappedSocket();
    if not FRawSocket.Bind(FHost, FPort) then
    begin
      RaiseLastOSError;
    end;
  end;
  
  procedure TDiocpUdpListener.Stop;
  