unit Winsock2;interface
uses Windows, Winsock; // LPWSAOVERLAPPED_COMPLETION_ROUTINE
const
WSA_IO_PENDING = ERROR_IO_PENDING;
WSA_IO_INCOMPLETE = ERROR_IO_INCOMPLETE;
WSA_INVALID_HANDLE = ERROR_INVALID_HANDLE;
WSA_INVALID_PARAMETER = ERROR_INVALID_PARAMETER;
WSA_NOT_ENOUGH_MEMORY = ERROR_NOT_ENOUGH_MEMORY;
WSA_OPERATION_ABORTED = ERROR_OPERATION_ABORTED;type
TWSAOVERLAPPED = record
    Internal : DWORD;
    InternalHigh : DWORD;
    Offset : DWORD;
    OffsetHigh : DWORD;
    hEvent : THandle;
end;TWSABUF = record
    len : DWORD;     // buffer length
    buf : PChar;
end;PWSABUF = ^TWSABUF;PWSAOVERLAPPED = ^TWSAOVERLAPPED;{
procedure CompletionROUTINE(
    dwError : DWORD;
   cbTransferred : DWORD;
Overlapped : PWSAOVERLAPPED;
   dwFlags : DWORD
);}function WSASend(s : TSocket; lpBuffers : PWSABUF; dwBufferCount : DWORD;
var NumberOfBytesSent : DWORD; dwFlags : DWORD;
    var overlapped : TWSAOVERLAPPED;
    Routine : DWORD
): Integer; stdcall;function WSAGetOverlappedResult (
  s : TSocket;
  var Overlapped : TWSAOVERLAPPED;
  var cbTransfer : DWORD;
  fWait : BOOL;
  var dwFlags : DWORD 
) : BOOL; stdcall;implementationfunction WSASend; external 'ws2_32.dll';
function WSAGetOverlappedResult; external 'ws2_32.dll';end.