Browse Source

+ initial revision, derieved from the linux version

florian 26 years ago
parent
commit
eea0e30b06
1 changed files with 217 additions and 0 deletions
  1. 217 0
      rtl/win32/sockets.pp

+ 217 - 0
rtl/win32/sockets.pp

@@ -0,0 +1,217 @@
+{
+    $Id$
+    This file is part of the Free Pascal run time library.
+    Copyright (c) 1993,99 by the Free Pascal development team
+
+    See the file COPYING.FPC, included in this distribution,
+    for details about the copyright.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+ **********************************************************************}
+{$mode objfpc}
+unit Sockets;
+
+Interface
+
+  Uses
+     windows,winsock;
+
+  Const
+     AF_MAX          = WinSock.AF_MAX;
+     PF_MAX          = AF_MAX;
+
+{$i socketsh.inc}
+
+Implementation
+
+{ Include filerec and textrec structures }
+{$i filerec.inc}
+{$i textrec.inc}
+
+{******************************************************************************
+                          Basic Socket Functions
+******************************************************************************}
+
+Function socket(Domain,SocketType,Protocol:Longint):Longint;
+begin
+  Socket:=WinSock.Socket(Domain,SocketType,ProtoCol);
+  if Socket<0 then
+    SocketError:=WSAGetLastError
+  else
+    SocketError:=0;
+end;
+
+Function Send(Sock:Longint;Var Addr;AddrLen,Flags:Longint):Longint;
+begin
+  Send:=WinSock.Send(Sock,Addr,AddrLen,Flags);
+  if Send<0 then
+    SocketError:=WSAGetLastError
+  else
+    SocketError:=0;
+end;
+
+Function Recv(Sock:Longint;Var Addr;AddrLen,Flags:Longint):Longint;
+begin
+  Recv:=WinSock.Recv(Sock,Addr,AddrLen,Flags);
+  if Recv<0 then
+    SocketError:=WSAGetLastError
+  else
+    SocketError:=0;
+end;
+
+Function Bind(Sock:Longint;Var Addr;AddrLen:Longint):Boolean;
+
+  var
+     l : longint;
+
+begin
+  l:=WinSock.Bind(Sock,WinSock.PSockAddr(@Addr),AddrLen);
+  if l<0 then
+    begin
+       SocketError:=WSAGetLastError;
+       Bind:=false;
+    end
+  else
+    begin
+       SocketError:=0;
+       Bind:=true;
+    end;
+end;
+
+Function Listen(Sock,MaxConnect:Longint):Boolean;
+
+  var
+     l : longint;
+
+begin
+  l:=WinSock.Listen(Sock,MaxConnect);
+  if l<0 then
+    begin
+       SocketError:=WSAGetLastError;
+       Listen:=false;
+    end
+  else
+    begin
+       SocketError:=0;
+       Listen:=true;
+    end;
+end;
+
+Function Accept(Sock:Longint;Var Addr;Var Addrlen:Longint):Longint;
+begin
+  Accept:=WinSock.Accept(Sock,WinSock.PSockAddr(@Addr),plongint(@AddrLen));
+  if Accept<0 then
+    SocketError:=WSAGetLastError
+  else
+    SocketError:=0;
+end;
+
+Function Connect(Sock:Longint;Var Addr;Addrlen:Longint):Longint;
+
+begin
+  Connect:=WinSock.Connect(Sock,WinSock.TSockAddr(Addr),AddrLen);
+  if Connect<0 then
+    SocketError:=WSAGetLastError
+  else
+    SocketError:=0;
+end;
+
+Function Shutdown(Sock:Longint;How:Longint):Longint;
+begin
+  ShutDown:=WinSock.ShutDown(Sock,How);
+  if ShutDown<0 then
+    SocketError:=WSAGetLastError
+  else
+    SocketError:=0;
+end;
+
+Function GetSocketName(Sock:Longint;Var Addr;Var Addrlen:Longint):Longint;
+begin
+  GetSocketName:=WinSock.GetSockName(Sock,WinSock.TSockAddr(Addr),AddrLen);
+  if GetSocketName<0 then
+    SocketError:=WSAGetLastError
+  else
+    SocketError:=0;
+end;
+
+Function GetPeerName(Sock:Longint;Var Addr;Var Addrlen:Longint):Longint;
+begin
+  GetPeerName:=WinSock.GetPeerName(Sock,WinSock.TSockAddr(Addr),AddrLen);
+  if GetPeerName<0 then
+    SocketError:=WSAGetLastError
+  else
+    SocketError:=0;
+end;
+
+Function SetSocketOptions(Sock,Level,OptName:Longint;Var OptVal;optlen:longint):Longint;
+begin
+  SetSocketOptions:=WinSock.SetSockOpt(Sock,Level,OptName,OptVal,OptLen);
+  if SetSocketOptions<0 then
+    SocketError:=WSAGetLastError
+  else
+    SocketError:=0;
+end;
+
+Function GetSocketOptions(Sock,Level,OptName:Longint;Var OptVal;optlen:longint):Longint;
+begin
+  GetSocketOptions:=WinSock.GetSockOpt(Sock,Level,OptName,OptVal,OptLen);
+  if GetSocketOptions<0 then
+    SocketError:=WSAGetLastError
+  else
+    SocketError:=0;
+end;
+
+Function SocketPair(Domain,SocketType,Protocol:Longint;var Pair:TSockArray):Longint;
+begin
+  // SocketPair:=SocketCall(Socket_Sys_SocketPair,Domain,SocketType,Protocol,longint(@Pair),0,0);
+end;
+
+
+{ mimic the linux fdWrite/fdRead calls for the file/text socket wrapper }
+function fdWrite(handle : longint;var bufptr;size : dword) : dword;
+
+  var
+     d : dword;
+
+  begin
+     if not(Windows.WriteFile(handle,bufptr,size,d,nil)) then
+       SocketError:=Windows.GetLastError
+     else
+       SocketError:=0;
+     fdWrite:=d;
+  end;
+
+function fdRead(handle : longint;var bufptr;size : dword) : dword;
+
+  var
+     d : dword;
+
+  begin
+     if not(Windows.ReadFile(handle,bufptr,size,d,nil)) then
+       SocketError:=Windows.GetLastError
+     else
+       SocketError:=0;
+     fdRead:=d;
+  end;
+
+
+{$i sockets.inc}
+
+{ winsocket stack needs an init. and cleanup code }
+var
+  wsadata : twsadata;
+
+initialization
+  WSAStartUp($2,wsadata);
+finalization
+  WSACleanUp;
+end.
+{
+  $Log$
+  Revision 1.1  1999-06-21 12:40:48  florian
+    + initial revision, derieved from the linux version
+
+}