ソースを参照

* undo sockets commit to 2.0

git-svn-id: branches/fixes_2_0@7405 -
marco 18 年 前
コミット
059ff20acd

+ 4 - 19
fcl/inc/ssockets.pp

@@ -62,8 +62,6 @@ type
   TConnectEvent = Procedure (Sender : TObject; Data : TSocketStream) Of Object;
   TConnectEvent = Procedure (Sender : TObject; Data : TSocketStream) Of Object;
   TConnectQuery = Procedure (Sender : TObject; ASocket : Longint; Var Allow : Boolean) of Object;
   TConnectQuery = Procedure (Sender : TObject; ASocket : Longint; Var Allow : Boolean) of Object;
 
 
-  { TSocketServer }
-
   TSocketServer = Class(TObject)
   TSocketServer = Class(TObject)
   Private
   Private
     FOnIdle : TNotifyEvent;
     FOnIdle : TNotifyEvent;
@@ -103,27 +101,19 @@ type
     Property SockType : Longint Read FSockType;
     Property SockType : Longint Read FSockType;
   end;
   end;
 
 
-  { TInetServer }
-
   TInetServer = Class(TSocketServer)
   TInetServer = Class(TSocketServer)
   Protected
   Protected
     FAddr : TINetSockAddr;
     FAddr : TINetSockAddr;
     Function  SockToStream (ASocket : Longint) : TSocketStream;Override;
     Function  SockToStream (ASocket : Longint) : TSocketStream;Override;
     Function Accept : Longint;override;
     Function Accept : Longint;override;
     FPort : Word;
     FPort : Word;
-    FHost: string;
   Public
   Public
     Procedure Bind; Override;
     Procedure Bind; Override;
     Constructor Create(APort: Word);
     Constructor Create(APort: Word);
-    Constructor Create(const aHost: string; const APort: Word);
     Property Port : Word Read FPort;
     Property Port : Word Read FPort;
-    Property Host : string Read FHost;
   end;
   end;
 
 
 {$ifdef Unix}
 {$ifdef Unix}
-
-  { TUnixServer }
-
   TUnixServer = Class(TSocketServer)
   TUnixServer = Class(TSocketServer)
   Private
   Private
     FUnixAddr : TUnixSockAddr;
     FUnixAddr : TUnixSockAddr;
@@ -403,16 +393,9 @@ end;
 
 
 Constructor TInetServer.Create(APort: Word);
 Constructor TInetServer.Create(APort: Word);
 
 
-begin
-  Create('0.0.0.0', aPort);
-end;
-
-Constructor TInetServer.Create(const aHost: string; const APort: Word);
-
 Var S : longint;
 Var S : longint;
 
 
 begin
 begin
-  FHost:=aHost;
   FPort:=APort;
   FPort:=APort;
   S:=Sockets.Socket(AF_INET,SOCK_STREAM,0);
   S:=Sockets.Socket(AF_INET,SOCK_STREAM,0);
   If S=-1 Then
   If S=-1 Then
@@ -420,12 +403,14 @@ begin
   Inherited Create(S);
   Inherited Create(S);
 end;
 end;
 
 
+
 Procedure TInetServer.Bind;
 Procedure TInetServer.Bind;
 
 
+
 begin
 begin
   Faddr.family := AF_INET;
   Faddr.family := AF_INET;
   Faddr.port := ShortHostToNet(FPort);
   Faddr.port := ShortHostToNet(FPort);
-  Faddr.addr := LongWord(StrToNetAddr(FHost));
+  Faddr.addr := 0;
   if not Sockets.Bind(FSocket, FAddr, Sizeof(FAddr)) then
   if not Sockets.Bind(FSocket, FAddr, Sizeof(FAddr)) then
     raise ESocketError.Create(seBindFailed, [IntToStr(FPort)]);
     raise ESocketError.Create(seBindFailed, [IntToStr(FPort)]);
   FBound:=True;
   FBound:=True;
@@ -555,7 +540,7 @@ begin
       end;
       end;
   addr.family := AF_INET;
   addr.family := AF_INET;
   addr.port := ShortHostToNet(FPort);
   addr.port := ShortHostToNet(FPort);
-  addr.addr := hosttonet(a.s_addr); // hosttonet(A).s_addr;
+  addr.addr := a.s_addr; // hosttonet(A).s_addr;
 //Cardinal(A);
 //Cardinal(A);
 
 
   If not Sockets.Connect(ASocket, addr, sizeof(addr)) then
   If not Sockets.Connect(ASocket, addr, sizeof(addr)) then

+ 33 - 115
rtl/darwin/unxsockh.inc

@@ -14,101 +14,29 @@
 }
 }
 
 
 Const
 Const
-   AF_UNSPEC = 0;     
-   AF_UNIX = 1;     
-   AF_LOCAL = AF_UNIX;     
-   AF_INET = 2;     
-   AF_IMPLINK = 3;     
-   AF_PUP = 4;     
-   AF_CHAOS = 5;     
-   AF_NS = 6;     
-   AF_ISO = 7;     
-   AF_OSI = AF_ISO;     
-   AF_ECMA = 8;     
-   AF_DATAKIT = 9;     
-   AF_CCITT = 10;     
-   AF_SNA = 11;     
-   AF_DECnet = 12;     
-   AF_DLI = 13;     
-   AF_LAT = 14;     
-   AF_HYLINK = 15;     
-   AF_APPLETALK = 16;     
-   AF_ROUTE = 17;     
-   AF_LINK = 18;     
-   pseudo_AF_XTP = 19;     
-   AF_COIP = 20;     
-   AF_CNT = 21;     
-   pseudo_AF_RTIP = 22;     
-   AF_IPX = 23;     
-   AF_SIP = 24;     
-   pseudo_AF_PIP = 25;     
-   AF_NDRV = 27;     
-   AF_ISDN = 28;     
-   AF_E164 = AF_ISDN;     
-   pseudo_AF_KEY = 29;     
-   AF_INET6 = 30;     
-   AF_NATM = 31;     
-   AF_SYSTEM = 32;     
-   AF_NETBIOS = 33;     
-   AF_PPP = 34;     
-   AF_ATM = 30;     
-   pseudo_AF_HDRCMPLT = 35;     
-   AF_RESERVED_36 = 36;     
-   AF_NETGRAPH = 32;     
-   AF_MAX = 37;     
+  AF_AX25         = 3;      { Amateur Radio AX.25          }
+  AF_IPX          = 4;      { Novell IPX                   }
+  AF_APPLETALK    = 5;      { Appletalk DDP                }
+  AF_NETROM       = 6;      { Amateur radio NetROM         }
+  AF_BRIDGE       = 7;       { Multiprotocol bridge         }
+  AF_AAL5         = 8;       { Reserved for Werner's ATM    }
+  AF_X25          = 9;       { Reserved for X.25 project    }
+  AF_INET6        = 10;      { IP version 6                 }
+  AF_MAX          = 12;
 
 
+  SOCK_PACKET     = 10;
 
 
-  {
-   * Protocol families, same as address families for now.
-    }
-
-     PF_UNSPEC = AF_UNSPEC;     
-     PF_LOCAL = AF_LOCAL;     
-  { backward compatibility  }
-     PF_UNIX = PF_LOCAL;     
-     PF_INET = AF_INET;     
-     PF_IMPLINK = AF_IMPLINK;     
-     PF_PUP = AF_PUP;     
-     PF_CHAOS = AF_CHAOS;     
-     PF_NS = AF_NS;     
-     PF_ISO = AF_ISO;     
-     PF_OSI = AF_ISO;     
-     PF_ECMA = AF_ECMA;     
-     PF_DATAKIT = AF_DATAKIT;     
-     PF_CCITT = AF_CCITT;     
-     PF_SNA = AF_SNA;     
-     PF_DECnet = AF_DECnet;     
-     PF_DLI = AF_DLI;     
-     PF_LAT = AF_LAT;     
-     PF_HYLINK = AF_HYLINK;     
-     PF_APPLETALK = AF_APPLETALK;     
-     PF_ROUTE = AF_ROUTE;     
-     PF_LINK = AF_LINK;     
-  { really just proto family, no AF  }
-     PF_XTP = pseudo_AF_XTP;     
-     PF_COIP = AF_COIP;     
-     PF_CNT = AF_CNT;     
-     PF_SIP = AF_SIP;     
-  { same format as AF_NS  }
-     PF_IPX = AF_IPX;     
-  { same format as AF_INET  }
-     PF_RTIP = pseudo_AF_RTIP;     
-     PF_PIP = pseudo_AF_PIP;     
-     PF_NDRV = AF_NDRV;     
-     PF_ISDN = AF_ISDN;     
-     PF_KEY = pseudo_AF_KEY;     
-     PF_INET6 = AF_INET6;     
-     PF_NATM = AF_NATM;     
-     PF_SYSTEM = AF_SYSTEM;     
-     PF_NETBIOS = AF_NETBIOS;     
-     PF_PPP = AF_PPP;     
-     PF_RESERVED_36 = AF_RESERVED_36;     
-     PF_ATM = AF_ATM;     
-     PF_NETGRAPH = AF_NETGRAPH;     
-     PF_MAX = AF_MAX;     
+  PF_AX25         = AF_AX25;
+  PF_IPX          = AF_IPX;
+  PF_APPLETALK    = AF_APPLETALK;
+  PF_NETROM       = AF_NETROM;
+  PF_BRIDGE       = AF_BRIDGE;
+  PF_AAL5         = AF_AAL5;
+  PF_X25          = AF_X25;
+  PF_INET6        = AF_INET6;
 
 
+  PF_MAX          = AF_MAX;
 
 
-  SOCK_PACKET     = 10;
 
 
 { Maximum queue length specifiable by listen.  }
 { Maximum queue length specifiable by listen.  }
   SOMAXCONN     = 128;
   SOMAXCONN     = 128;
@@ -125,9 +53,6 @@ Const
         SO_OOBINLINE     =$0100;        { leave received OOB data in line }
         SO_OOBINLINE     =$0100;        { leave received OOB data in line }
         SO_REUSEPORT     =$0200;        { allow local address & port reuse }
         SO_REUSEPORT     =$0200;        { allow local address & port reuse }
         SO_TIMESTAMP     =$0400;        { timestamp received dgram traffic }
         SO_TIMESTAMP     =$0400;        { timestamp received dgram traffic }
-        SO_ACCEPTFILTER  =$1000;        { there is an accept filter }
-        SO_DONTTRUNC     =$2000;        { APPLE: Retain unread data (ATOMIC proto) }
-        SO_WANTMORE      =$4000;        { APPLE: Want OOB in MSG_FLAG on receive }
 
 
 {
 {
  * Additional options, not kept in so_options.
  * Additional options, not kept in so_options.
@@ -141,13 +66,6 @@ Const
         SO_ERROR         =$1007;        { get error status and clear }
         SO_ERROR         =$1007;        { get error status and clear }
         SO_TYPE          =$1008;        { get socket type }
         SO_TYPE          =$1008;        { get socket type }
 
 
-        SO_NREAD         =$1020;        { APPLE: get 1st-packet byte count }
-        SO_NKE           =$1021;        { APPLE: Install socket-level NKE }
-        SO_NOSIGPIPE     =$1022;        { APPLE: No SIGPIPE on EPIPE }
-        SO_NOADDRERR     =$1023;        { APPLE: Returns EADDRNOTAVAIL when src is not available anymore }
-        SO_NWRITE        =$1024;        { APPLE: Get number of bytes currently in send socket buffer }
-        SO_LINGER_SEC    =$1080;        { linger on close if data present (in seconds) }
-
 
 
         SHUT_RD         =0;             { shut down the reading side }
         SHUT_RD         =0;             { shut down the reading side }
         SHUT_WR         =1;             { shut down the writing side }
         SHUT_WR         =1;             { shut down the writing side }
@@ -266,14 +184,14 @@ Const
 
 
       	IPPROTO_DONE		=257;
       	IPPROTO_DONE		=257;
 
 
-        IPV6_OPTIONS		= 1; { buf/ip6_opts; set/get IP6 options }
-        IPV6_RECVOPTS		= 5; { bool; receive all IP6 opts w/dgram }
-        IPV6_RECVRETOPTS	= 6; { bool; receive IP6 opts for response }
-        IPV6_RECVDSTADDR	= 7; { bool; receive IP6 dst addr w/dgram }
-        IPV6_RETOPTS		= 8; { ip6_opts; set/get IP6 options }
-        IPV6_SOCKOPT_RESERVED1	= 3; { reserved for future use }
-        IPV6_UNICAST_HOPS	= 4; { int; IP6 hops }
-        IPV6_MULTICAST_IF	= 9; { __uint8_t; set/get IP6 multicast i/f  }
+        IPV6_OPTIONS		= 1;  { buf/ip6_opts; set/get IP6 options }
+        IPV6_RECVOPTS		= 5;  { bool; receive all IP6 opts w/dgram }
+        IPV6_RECVRETOPTS	= 6;  { bool; receive IP6 opts for response }
+        IPV6_RECVDSTADDR	= 7;  { bool; receive IP6 dst addr w/dgram }
+        IPV6_RETOPTS		= 8;  { ip6_opts; set/get IP6 options }
+        IPV6_SOCKOPT_RESERVED1	= 3;  { reserved for future use }
+        IPV6_UNICAST_HOPS	= 4;  { int; IP6 hops }
+        IPV6_MULTICAST_IF	= 9;  { __uint8_t; set/get IP6 multicast i/f  }
         IPV6_MULTICAST_HOPS	=10; { __uint8_t; set/get IP6 multicast hops }
         IPV6_MULTICAST_HOPS	=10; { __uint8_t; set/get IP6 multicast hops }
         IPV6_MULTICAST_LOOP	=11; { __uint8_t; set/get IP6 mcast loopback }
         IPV6_MULTICAST_LOOP	=11; { __uint8_t; set/get IP6 mcast loopback }
         IPV6_JOIN_GROUP		=12; { ip6_mreq; join a group membership }
         IPV6_JOIN_GROUP		=12; { ip6_mreq; join a group membership }
@@ -300,10 +218,10 @@ Const
       	IP_RECVDSTADDR		=  7;    { bool; receive IP dst addr w/dgram }
       	IP_RECVDSTADDR		=  7;    { bool; receive IP dst addr w/dgram }
       	IP_RETOPTS		=  8;    { ip_opts; set/get IP options }
       	IP_RETOPTS		=  8;    { ip_opts; set/get IP options }
       	IP_MULTICAST_IF		=  9;    { u_char; set/get IP multicast i/f  }
       	IP_MULTICAST_IF		=  9;    { u_char; set/get IP multicast i/f  }
-      	IP_MULTICAST_TTL	= 10;    { u_char; set/get IP multicast ttl }
-      	IP_MULTICAST_LOOP	= 11;    { u_char; set/get IP multicast loopback }
-      	IP_ADD_MEMBERSHIP	= 12;    { ip_mreq; add an IP group membership }
-      	IP_DROP_MEMBERSHIP	= 13;    { ip_mreq; drop an IP group membership }
+      	IP_MULTICAST_TTL	= 10;   { u_char; set/get IP multicast ttl }
+      	IP_MULTICAST_LOOP	= 11;   { u_char; set/get IP multicast loopback }
+      	IP_ADD_MEMBERSHIP	= 12;   { ip_mreq; add an IP group membership }
+      	IP_DROP_MEMBERSHIP	= 13;   { ip_mreq; drop an IP group membership }
 
 
   { Flags for send, recv etc. }
   { Flags for send, recv etc. }
   MSG_OOB        = $0001;              { Process out-of-band data}
   MSG_OOB        = $0001;              { Process out-of-band data}
@@ -315,8 +233,8 @@ Const
   MSG_WAITALL    = $0040;              { Wait for a full request }
   MSG_WAITALL    = $0040;              { Wait for a full request }
   MSG_DONTWAIT   = $0080;              { Non-blocking I/O }
   MSG_DONTWAIT   = $0080;              { Non-blocking I/O }
   MSG_EOF        = $0100;
   MSG_EOF        = $0100;
-  MSG_WAITSTREAM = $0200;              { wait up to full request.. may return partial }
-  MSG_FLUSH 	 = $0400;              { Start of 'hold' seq; dump so_temp }
+  MSG_WAITSTREAM = $0200;	             { wait up to full request.. may return partial }
+  MSG_FLUSH 	   = $0400;              { Start of 'hold' seq; dump so_temp }
   MSG_HOLD       = $0800;              { Hold frag in so_temp }
   MSG_HOLD       = $0800;              { Hold frag in so_temp }
   MSG_SEND       = $1000;              { Send the packet in so_temp }
   MSG_SEND       = $1000;              { Send the packet in so_temp }
   MSG_HAVEMORE   = $2000;              { Data ready to be read }
   MSG_HAVEMORE   = $2000;              { Data ready to be read }

+ 15 - 15
rtl/freebsd/unixsock.inc

@@ -20,91 +20,91 @@
 function  fpsocket (domain:cint; xtype:cint; protocol: cint):cint;
 function  fpsocket (domain:cint; xtype:cint; protocol: cint):cint;
 Begin
 Begin
   fpSocket:=Do_Syscall(syscall_nr_socket,Domain,xtype,Protocol);
   fpSocket:=Do_Syscall(syscall_nr_socket,Domain,xtype,Protocol);
-  internal_socketerror:=fpgeterrno;
+  socketerror:=fpgeterrno;
 End;
 End;
 
 
 function  fpsend (s:cint; msg:pointer; len:size_t; flags:cint):ssize_t;
 function  fpsend (s:cint; msg:pointer; len:size_t; flags:cint):ssize_t;
 begin
 begin
   fpSend:=do_syscall(syscall_nr_sendto,S,TSysParam(msg),Len,Flags,0,0);
   fpSend:=do_syscall(syscall_nr_sendto,S,TSysParam(msg),Len,Flags,0,0);
-  internal_socketerror:=fpgeterrno;
+  socketerror:=fpgeterrno;
 end;
 end;
 
 
 function  fpsendto (s:cint; msg:pointer; len:size_t; flags:cint; tox :psockaddr; tolen: tsocklen):ssize_t;
 function  fpsendto (s:cint; msg:pointer; len:size_t; flags:cint; tox :psockaddr; tolen: tsocklen):ssize_t;
 begin
 begin
   fpSendto:=do_syscall(syscall_nr_sendto,S,TSysParam(msg),Len,Flags,TSysParam(tox),tolen);
   fpSendto:=do_syscall(syscall_nr_sendto,S,TSysParam(msg),Len,Flags,TSysParam(tox),tolen);
-  internal_socketerror:=fpgeterrno;
+  socketerror:=fpgeterrno;
 end;
 end;
 
 
 function  fprecv (s:cint; buf: pointer; len: size_t; flags:cint):ssize_t;
 function  fprecv (s:cint; buf: pointer; len: size_t; flags:cint):ssize_t;
 begin
 begin
   fpRecv:=do_syscall(syscall_nr_Recvfrom,S,tsysparam(buf),len,flags,0,0);
   fpRecv:=do_syscall(syscall_nr_Recvfrom,S,tsysparam(buf),len,flags,0,0);
-  internal_socketerror:=fpgeterrno;
+  socketerror:=fpgeterrno;
 end;
 end;
 
 
 function  fprecvfrom (s:cint; buf: pointer; len: size_t; flags: cint; from : psockaddr; fromlen : psocklen):ssize_t;
 function  fprecvfrom (s:cint; buf: pointer; len: size_t; flags: cint; from : psockaddr; fromlen : psocklen):ssize_t;
 begin
 begin
   fpRecvFrom:=do_syscall(syscall_nr_Recvfrom,S,TSysParam(buf),len,flags,TSysParam(from),TSysParam(fromlen));
   fpRecvFrom:=do_syscall(syscall_nr_Recvfrom,S,TSysParam(buf),len,flags,TSysParam(from),TSysParam(fromlen));
-  internal_socketerror:=fpgeterrno;
+  socketerror:=fpgeterrno;
 end;
 end;
 
 
 function  fpbind (s:cint; addrx : psockaddr; addrlen : tsocklen):cint;
 function  fpbind (s:cint; addrx : psockaddr; addrlen : tsocklen):cint;
 begin
 begin
   fpBind:=do_syscall(syscall_nr_Bind,S,TSysParam(addrx),addrlen);
   fpBind:=do_syscall(syscall_nr_Bind,S,TSysParam(addrx),addrlen);
-  internal_socketerror:=fpgeterrno;
+  socketerror:=fpgeterrno;
 end;
 end;
 
 
 function  fplisten (s:cint; backlog : cint):cint;
 function  fplisten (s:cint; backlog : cint):cint;
 begin
 begin
   fpListen:=do_syscall(syscall_nr_Listen,S,backlog);
   fpListen:=do_syscall(syscall_nr_Listen,S,backlog);
-  internal_socketerror:=fpgeterrno;
+  socketerror:=fpgeterrno;
 end;
 end;
 
 
 function  fpaccept (s:cint; addrx : psockaddr; addrlen : psocklen):cint;
 function  fpaccept (s:cint; addrx : psockaddr; addrlen : psocklen):cint;
 begin
 begin
   fpAccept:=do_syscall(syscall_nr_accept,S,TSysParam(addrx),TSysParam(addrlen));
   fpAccept:=do_syscall(syscall_nr_accept,S,TSysParam(addrx),TSysParam(addrlen));
-  internal_socketerror:=fpgeterrno;
+  socketerror:=fpgeterrno;
 end;
 end;
 
 
 function  fpconnect (s:cint; name  : psockaddr; namelen : tsocklen):cint;
 function  fpconnect (s:cint; name  : psockaddr; namelen : tsocklen):cint;
 begin
 begin
   fpConnect:=do_syscall(syscall_nr_connect,S,TSysParam(name),namelen);
   fpConnect:=do_syscall(syscall_nr_connect,S,TSysParam(name),namelen);
-  internal_socketerror:=fpgeterrno;
+  socketerror:=fpgeterrno;
 end;
 end;
 
 
 function  fpshutdown (s:cint; how:cint):cint;
 function  fpshutdown (s:cint; how:cint):cint;
 begin
 begin
   fpShutDown:=do_syscall(syscall_nr_shutdown,S,how);
   fpShutDown:=do_syscall(syscall_nr_shutdown,S,how);
-  internal_socketerror:=fpgeterrno;
+  socketerror:=fpgeterrno;
 end;
 end;
 
 
 function  fpgetsockname (s:cint; name  : psockaddr; namelen : psocklen):cint;
 function  fpgetsockname (s:cint; name  : psockaddr; namelen : psocklen):cint;
 begin
 begin
   fpGetSockName:=do_syscall(syscall_nr_GetSockName,S,TSysParam(name),TSysParam(namelen));
   fpGetSockName:=do_syscall(syscall_nr_GetSockName,S,TSysParam(name),TSysParam(namelen));
-  internal_socketerror:=fpgeterrno;
+  socketerror:=fpgeterrno;
 end;
 end;
 
 
 function  fpgetpeername (s:cint; name  : psockaddr; namelen : psocklen):cint;
 function  fpgetpeername (s:cint; name  : psockaddr; namelen : psocklen):cint;
 begin
 begin
   fpGetPeerName:=do_syscall(syscall_nr_GetPeerName,S,TSysParam(name),TSysParam(namelen));
   fpGetPeerName:=do_syscall(syscall_nr_GetPeerName,S,TSysParam(name),TSysParam(namelen));
-  internal_socketerror:=fpgeterrno;
+  socketerror:=fpgeterrno;
 end;
 end;
 
 
 function  fpsetsockopt  (s:cint; level:cint; optname:cint; optval:pointer; optlen : tsocklen):cint;
 function  fpsetsockopt  (s:cint; level:cint; optname:cint; optval:pointer; optlen : tsocklen):cint;
 begin
 begin
   fpSetSockOpt:=do_syscall(syscall_nr_SetSockOpt,S,level,optname,TSysParam(optval),optlen);
   fpSetSockOpt:=do_syscall(syscall_nr_SetSockOpt,S,level,optname,TSysParam(optval),optlen);
-  internal_socketerror:=fpgeterrno;
+  socketerror:=fpgeterrno;
 end;
 end;
 
 
 function  fpgetsockopt  (s:cint; level:cint; optname:cint; optval:pointer; optlen : psocklen):cint;
 function  fpgetsockopt  (s:cint; level:cint; optname:cint; optval:pointer; optlen : psocklen):cint;
 begin
 begin
   fpGetSockOpt:=do_syscall(syscall_nr_GetSockOpt,S,level,TSysParam(optname),TSysParam(optval),TSysParam(optlen));
   fpGetSockOpt:=do_syscall(syscall_nr_GetSockOpt,S,level,TSysParam(optname),TSysParam(optval),TSysParam(optlen));
-  internal_socketerror:=fpgeterrno;
+  socketerror:=fpgeterrno;
 end;
 end;
 
 
 function  fpsocketpair (d:cint; xtype:cint; protocol:cint; sv:pcint):cint;
 function  fpsocketpair (d:cint; xtype:cint; protocol:cint; sv:pcint):cint;
 
 
 begin
 begin
   fpSocketPair:=do_syscall(syscall_nr_SocketPair,d,xtype,protocol,TSysParam(sv));
   fpSocketPair:=do_syscall(syscall_nr_SocketPair,d,xtype,protocol,TSysParam(sv));
-  internal_socketerror:=fpgeterrno;
+  socketerror:=fpgeterrno;
 end;
 end;
 
 

+ 20 - 98
rtl/freebsd/unxsockh.inc

@@ -14,104 +14,28 @@
 }
 }
 
 
 Const
 Const
-{*
- * Address families.
- *}
-  AF_UNSPEC        = 0;		{ unspecified }
-  AF_UNIX          = 1;		{ standardized name for AF_LOCAL }
-  AF_LOCAL         = AF_UNIX;	{ local to host (pipes, portals) }
-  AF_INET          = 2;		{ internetwork: UDP, TCP, etc. }
-  AF_IMPLINK       = 3;		{ arpanet imp addresses }
-  AF_PUP           = 4;		{ pup protocols: e.g. BSP }
-  AF_CHAOS         = 5;		{ mit CHAOS protocols }
-  AF_NETBIOS       = 6;		{ SMB protocols }
-  AF_ISO           = 7;		{ ISO protocols }
-  AF_OSI           = AF_ISO;
-  AF_ECMA          = 8;		{ European computer manufacturers }
-  AF_DATAKIT       = 9;		{ datakit protocols }
-  AF_CCITT         = 10;	{ CCITT protocols, X.25 etc }
-  AF_SNA           = 11;	{ IBM SNA }
-  AF_DECnet        = 12;	{ DECnet }
-  AF_DLI           = 13;	{ DEC Direct data link interface }
-  AF_LAT           = 14;	{ LAT }
-  AF_HYLINK        = 15;	{ NSC Hyperchannel }
-  AF_APPLETALK     = 16;	{ Apple Talk }
-  AF_ROUTE         = 17;	{ Internal Routing Protocol }
-  AF_LINK          = 18;	{ Link layer interface }
-  pseudo_AF_XTP    = 19;	{ eXpress Transfer Protocol (no AF) }
-  AF_COIP          = 20;	{ connection-oriented IP, aka ST II }
-  AF_CNT           = 21;	{ Computer Network Technology }
-  pseudo_AF_RTIP   = 22;	{ Help Identify RTIP packets }
-  AF_IPX           = 23;	{ Novell Internet Protocol }
-  AF_SIP           = 24;	{ Simple Internet Protocol }
-  pseudo_AF_PIP    = 25;	{ Help Identify PIP packets }
-  AF_ISDN          = 26;	{ Integrated Services Digital Network}
-  AF_E164          = AF_ISDN;	{ CCITT E.164 recommendation }
-  pseudo_AF_KEY    = 27;	{ Internal key-management function }
-  AF_INET6         = 28;	{ IPv6 }
-  AF_NATM          = 29;	{ native ATM access }
-  AF_ATM           = 30;	{ ATM }
-  pseudo_AF_HDRCMPLT = 31;	{ Used by BPF to not rewrite headers
-					 * in interface output routine
-                                         }
-  AF_NETGRAPH      = 32;	{ Netgraph sockets }
-  AF_SLOW          = 33;	{ 802.3ad slow protocol }
-  AF_SCLUSTER      = 34;	{ Sitara cluster protocol }
-  AF_ARP           = 35;
-  AF_BLUETOOTH     = 36;	{ Bluetooth sockets }
-  AF_IEEE80211     = 37;	{ IEEE 802.11 protocol }
-  AF_MAX           = 38;
-  
-  {
-   * Protocol families, same as address families for now.
-    }
+  AF_AX25         = 3;      { Amateur Radio AX.25          }
+  AF_IPX          = 4;      { Novell IPX                   }
+  AF_APPLETALK    = 5;      { Appletalk DDP                }
+  AF_NETROM       = 6;      { Amateur radio NetROM         }
+  AF_BRIDGE       = 7;       { Multiprotocol bridge         }
+  AF_AAL5         = 8;       { Reserved for Werner's ATM    }
+  AF_X25          = 9;       { Reserved for X.25 project    }
+  AF_INET6        = 10;      { IP version 6                 }
+  AF_MAX          = 12;
 
 
-  const
-     PF_UNSPEC = AF_UNSPEC;
-     PF_LOCAL = AF_LOCAL;
-  { backward compatibility  }
-     PF_UNIX = PF_LOCAL;
-     PF_INET = AF_INET;
-     PF_IMPLINK = AF_IMPLINK;
-     PF_PUP = AF_PUP;
-     PF_CHAOS = AF_CHAOS;
-     PF_NETBIOS = AF_NETBIOS;
-     PF_ISO = AF_ISO;
-     PF_OSI = AF_ISO;
-     PF_ECMA = AF_ECMA;
-     PF_DATAKIT = AF_DATAKIT;
-     PF_CCITT = AF_CCITT;
-     PF_SNA = AF_SNA;
-     PF_DECnet = AF_DECnet;
-     PF_DLI = AF_DLI;
-     PF_LAT = AF_LAT;
-     PF_HYLINK = AF_HYLINK;
-     PF_APPLETALK = AF_APPLETALK;
-     PF_ROUTE = AF_ROUTE;
-     PF_LINK = AF_LINK;
-  { really just proto family, no AF  }
-     PF_XTP = pseudo_AF_XTP;
-     PF_COIP = AF_COIP;
-     PF_CNT = AF_CNT;
-     PF_SIP = AF_SIP;
-     PF_IPX = AF_IPX;
-  { same format as AF_INET  }
-     PF_RTIP = pseudo_AF_RTIP;
-     PF_PIP = pseudo_AF_PIP;
-     PF_ISDN = AF_ISDN;
-     PF_KEY = pseudo_AF_KEY;
-     PF_INET6 = AF_INET6;
-     PF_NATM = AF_NATM;
-     PF_ATM = AF_ATM;
-     PF_NETGRAPH = AF_NETGRAPH;
-     PF_SLOW = AF_SLOW;
-     PF_SCLUSTER = AF_SCLUSTER;
-     PF_ARP = AF_ARP;
-     PF_BLUETOOTH = AF_BLUETOOTH;
-     PF_MAX = AF_MAX;
+  SOCK_PACKET     = 10;
 
 
+  PF_AX25         = AF_AX25;
+  PF_IPX          = AF_IPX;
+  PF_APPLETALK    = AF_APPLETALK;
+  PF_NETROM       = AF_NETROM;
+  PF_BRIDGE       = AF_BRIDGE;
+  PF_AAL5         = AF_AAL5;
+  PF_X25          = AF_X25;
+  PF_INET6        = AF_INET6;
 
 
-  SOCK_PACKET     = 10;
+  PF_MAX          = AF_MAX;
 
 
 
 
 { Maximum queue length specifiable by listen.  }
 { Maximum queue length specifiable by listen.  }
@@ -346,6 +270,4 @@ Const
   MSG_COMPAT    = $8000;
   MSG_COMPAT    = $8000;
   MSG_SOCALLBCK = $10000;
   MSG_SOCALLBCK = $10000;
   MSG_NOSIGNAL  = $20000;              { Do not generate SIGPIPE }
   MSG_NOSIGNAL  = $20000;              { Do not generate SIGPIPE }
-  
-  INVALID_SOCKET = -1;
-  SOCKET_ERROR = -1;
+

+ 19 - 45
rtl/inc/sockets.inc

@@ -15,6 +15,7 @@
                      Text File Writeln/ReadLn Support
                      Text File Writeln/ReadLn Support
 ******************************************************************************}
 ******************************************************************************}
 
 
+
 Procedure OpenSock(var F:Text);
 Procedure OpenSock(var F:Text);
 begin
 begin
   if textrec(f).handle=UnusedHandle then
   if textrec(f).handle=UnusedHandle then
@@ -28,56 +29,19 @@ begin
    end;
    end;
 end;
 end;
 
 
-procedure iosock(var f:text);
 
 
-var r:sizeint;
-    def_error:word;
 
 
+Procedure IOSock(var F:text);
 begin
 begin
-  with textrec(f) do
-    begin
-      case mode of
-        fmoutput:
-          begin
-            repeat
-{$ifdef use_readwrite}
-              r:=fpwrite(handle,bufptr^,bufpos);
-{$else}
-              r:=send(handle,bufptr^,bufpos,0);
-{$endif}
-            until (r<>-1) or (SocketError <> EsockEINTR);
-            bufend:=r;
-            def_error:=101; {File write error.}
-          end;
-        fminput:
-          begin
-            repeat
-{$ifdef use_readwrite}
-              r:=fpread(handle,bufptr^,bufsize);
-{$else}
-              r:=recv(handle,bufptr^,bufsize,0);
-{$endif}
-            until (r<>-1) or (SocketError <> EsockEINTR);
-            bufend:=r;
-            def_error:=100; {File read error.}
-          end;
-      end;
-      if r=-1 then
-        case SocketError of
-          EsockEBADF:
-{          EsysENOTSOCK:}   {Why is this constant not defined? (DM)}
-            inoutres:=6;    {Invalid file handle.}
-          EsockEFAULT:
-            inoutres:=217;
-          EsockEINVAL:
-            inoutres:=218;
-        else
-          inoutres:=def_error;
-        end;
-      bufpos:=0;
-    end;
+  case textrec(f).mode of
+   fmoutput : {$ifdef unix}fpWrite{$else}fdwrite{$endif}(textrec(f).handle,textrec(f).bufptr^,textrec(f).bufpos);
+    fminput : textrec(f).BufEnd:={$ifdef Unix}fpRead{$else}fdread{$endif}(textrec(f).handle,textrec(f).bufptr^,textrec(f).bufsize);
+  end;
+  textrec(f).bufpos:=0;
 end;
 end;
 
 
+
+
 Procedure FlushSock(var F:Text);
 Procedure FlushSock(var F:Text);
 begin
 begin
   if (textrec(f).mode=fmoutput) and (textrec(f).bufpos<>0) then
   if (textrec(f).mode=fmoutput) and (textrec(f).bufpos<>0) then
@@ -87,11 +51,15 @@ begin
    end;
    end;
 end;
 end;
 
 
+
+
 Procedure CloseSock(var F:text);
 Procedure CloseSock(var F:text);
 begin
 begin
   { Nothing special has to be done here }
   { Nothing special has to be done here }
 end;
 end;
 
 
+
+
 Procedure Sock2Text(Sock:Longint;Var SockIn,SockOut:Text);
 Procedure Sock2Text(Sock:Longint;Var SockIn,SockOut:Text);
 {
 {
  Set up two Pascal Text file descriptors for reading and writing)
  Set up two Pascal Text file descriptors for reading and writing)
@@ -117,6 +85,7 @@ begin
   TextRec(SockOut).Mode := fmOutput;
   TextRec(SockOut).Mode := fmOutput;
 end;
 end;
 
 
+
 {******************************************************************************
 {******************************************************************************
                                 Untyped File
                                 Untyped File
 ******************************************************************************}
 ******************************************************************************}
@@ -143,18 +112,22 @@ end;
 ******************************************************************************}
 ******************************************************************************}
 
 
 Function DoAccept(Sock:longint;Var addr:TInetSockAddr):longint;
 Function DoAccept(Sock:longint;Var addr:TInetSockAddr):longint;
+
 Var AddrLen : Longint;
 Var AddrLen : Longint;
+
 begin
 begin
   AddrLEn:=SizeOf(Addr);
   AddrLEn:=SizeOf(Addr);
   DoAccept:=Accept(Sock,Addr,AddrLen);
   DoAccept:=Accept(Sock,Addr,AddrLen);
 end;
 end;
 
 
 Function DoConnect(Sock:longint;const addr: TInetSockAddr): Boolean;
 Function DoConnect(Sock:longint;const addr: TInetSockAddr): Boolean;
+
 begin
 begin
   DoConnect:=Connect(Sock,Addr,SizeOF(TInetSockAddr));
   DoConnect:=Connect(Sock,Addr,SizeOF(TInetSockAddr));
 end;
 end;
 
 
 Function Connect(Sock:longint;const addr: TInetSockAddr;var SockIn,SockOut:text):Boolean;
 Function Connect(Sock:longint;const addr: TInetSockAddr;var SockIn,SockOut:text):Boolean;
+
 begin
 begin
   Connect:=DoConnect(Sock,addr);
   Connect:=DoConnect(Sock,addr);
   If Connect then
   If Connect then
@@ -162,6 +135,7 @@ begin
 end;
 end;
 
 
 Function Connect(Sock:longint;const addr:TInetSockAddr;var SockIn,SockOut:file):Boolean;
 Function Connect(Sock:longint;const addr:TInetSockAddr;var SockIn,SockOut:file):Boolean;
+
 begin
 begin
   Connect:=DoConnect(Sock,addr);
   Connect:=DoConnect(Sock,addr);
   If Connect then
   If Connect then

+ 40 - 34
rtl/inc/socketsh.inc

@@ -36,6 +36,21 @@ const
   SOCK_SEQPACKET  = 5;               { sequential packet socket     }
   SOCK_SEQPACKET  = 5;               { sequential packet socket     }
 {$endif}
 {$endif}
 
 
+  { Protocol families }
+  PF_UNSPEC    = 0;                  { Unspecified }
+  PF_LOCAL     = 1;                  { Local to host (pipes and file-domain) }
+  PF_UNIX      = PF_LOCAL;           { Old BSD name for PF_LOCAL }
+  PF_FILE      = PF_LOCAL;           { Another non-standard name for PF_LOCAL }
+  PF_INET      = 2;                  { IP protocol family }
+
+
+  { Address families }
+  AF_UNSPEC    = PF_UNSPEC;
+  AF_LOCAL     = PF_LOCAL;
+  AF_UNIX      = PF_UNIX;
+  AF_FILE      = PF_FILE;
+  AF_INET      = PF_INET;
+
   INADDR_ANY   = CARDINAL(0);
   INADDR_ANY   = CARDINAL(0);
   INADDR_NONE  = CARDINAL($FFFFFFFF);
   INADDR_NONE  = CARDINAL($FFFFFFFF);
 
 
@@ -145,19 +160,9 @@ type
   TSockPairArray = Array[0..1] of Longint;
   TSockPairArray = Array[0..1] of Longint;
   TSockArray     = Array[1..2] of Longint;              //legacy
   TSockArray     = Array[1..2] of Longint;              //legacy
 
 
-  psockaddr_un = ^sockaddr_un;
-  sockaddr_un = packed record
-    {$ifdef SOCK_HAS_SINLEN}
-      sun_len     : cuint8;
-    {$endif}
-    sun_family    : sa_family_t;
-    sun_path      : array[0..107] of char;
-  end;
-
-  Tsocket=longint;   {To easy porting code from Kylix libc unit to sockets unit.}
-
 
 
-function socketerror : cint; 
+Var
+  SocketError:cint;
 
 
 function  fpsocket      (domain:cint; xtype:cint; protocol: cint):cint;
 function  fpsocket      (domain:cint; xtype:cint; protocol: cint):cint;
 function  fprecv        (s:cint; buf: pointer; len: size_t; flags: cint):ssize_t;
 function  fprecv        (s:cint; buf: pointer; len: size_t; flags: cint):ssize_t;
@@ -176,33 +181,34 @@ function  fpsetsockopt  (s:cint; level:cint; optname:cint; optval:pointer; optle
 function  fpsocketpair  (d:cint; xtype:cint; protocol:cint; sv:pcint):cint;
 function  fpsocketpair  (d:cint; xtype:cint; protocol:cint; sv:pcint):cint;
 
 
 {Basic Socket Functions}
 {Basic Socket Functions}
-Function Socket(Domain,SocketType,Protocol:Longint):Longint; deprecated;
-Function CloseSocket(Sock:Longint):Longint; // vote is still out on this one
-Function Send(Sock:Longint;Const Buf;BufLen,Flags:Longint):Longint; deprecated;
-Function SendTo(Sock:Longint;Const Buf;BufLen,Flags:Longint;Var Addr; AddrLen : Longint):Longint; deprecated;
-Function Recv(Sock:Longint;Var Buf;BufLen,Flags:Longint):Longint; deprecated;
-Function RecvFrom(Sock : Longint; Var Buf; Buflen,Flags : Longint; Var Addr; var AddrLen : longInt) : longint;deprecated; 
-Function Bind(Sock:Longint;Const Addr;AddrLen:Longint):Boolean;deprecated;
-Function Listen (Sock,MaxConnect:Longint):Boolean;deprecated;
-Function Accept(Sock:Longint;Var Addr;Var Addrlen:Longint):Longint;deprecated;
-Function Connect(Sock:Longint;Const Addr;Addrlen:Longint):boolean;deprecated;
-Function Shutdown(Sock:Longint;How:Longint):Longint;deprecated;
-Function GetSocketName(Sock:Longint;Var Addr;Var Addrlen:Longint):Longint;deprecated;
-Function GetPeerName(Sock:Longint;Var Addr;Var Addrlen:Longint):Longint;deprecated;
-Function SetSocketOptions(Sock,Level,OptName:Longint;const OptVal;optlen:longint):Longint;deprecated;
-Function GetSocketOptions(Sock,Level,OptName:Longint;Var OptVal;Var optlen:longint):Longint;deprecated;
-Function SocketPair(Domain,SocketType,Protocol:Longint;var Pair:TSockArray):Longint;deprecated;
+Function Socket(Domain,SocketType,Protocol:Longint):Longint;
+Function CloseSocket(Sock:Longint):Longint;
+Function Send(Sock:Longint;Const Buf;BufLen,Flags:Longint):Longint;
+Function SendTo(Sock:Longint;Const Buf;BufLen,Flags:Longint;Var Addr; AddrLen : Longint):Longint;
+Function Recv(Sock:Longint;Var Buf;BufLen,Flags:Longint):Longint;
+Function RecvFrom(Sock : Longint; Var Buf; Buflen,Flags : Longint; Var Addr; var AddrLen : longInt) : longint;
+Function Bind(Sock:Longint;Const Addr;AddrLen:Longint):Boolean;
+Function Listen (Sock,MaxConnect:Longint):Boolean;
+Function Accept(Sock:Longint;Var Addr;Var Addrlen:Longint):Longint;
+Function Connect(Sock:Longint;Const Addr;Addrlen:Longint):boolean;
+Function Shutdown(Sock:Longint;How:Longint):Longint;
+Function GetSocketName(Sock:Longint;Var Addr;Var Addrlen:Longint):Longint;
+Function GetPeerName(Sock:Longint;Var Addr;Var Addrlen:Longint):Longint;
+Function SetSocketOptions(Sock,Level,OptName:Longint;const OptVal;optlen:longint):Longint;
+Function GetSocketOptions(Sock,Level,OptName:Longint;Var OptVal;Var optlen:longint):Longint;
+Function SocketPair(Domain,SocketType,Protocol:Longint;var Pair:TSockArray):Longint;
 
 
 {Text Support}
 {Text Support}
-Procedure Sock2Text(Sock:Longint;Var SockIn,SockOut:Text);deprecated;
+Procedure Sock2Text(Sock:Longint;Var SockIn,SockOut:Text);
 
 
 {Untyped File Support}
 {Untyped File Support}
-Procedure Sock2File(Sock:Longint;Var SockIn,SockOut:File);deprecated;
+Procedure Sock2File(Sock:Longint;Var SockIn,SockOut:File);
 
 
-Function Accept(Sock:longint;var addr:TInetSockAddr;var SockIn,SockOut:File):Boolean; deprecated;
-Function Accept(Sock:longint;var addr:TInetSockAddr;var SockIn,SockOut:text):Boolean;deprecated;
-Function Connect(Sock:longint;const addr:TInetSockAddr;var SockIn,SockOut:text):Boolean; deprecated;
-Function Connect(Sock:longint;const addr:TInetSockAddr;var SockIn,SockOut:file):Boolean;deprecated;
+{Better Pascal Calling, Overloaded Functions!}
+Function Accept(Sock:longint;var addr:TInetSockAddr;var SockIn,SockOut:File):Boolean;
+Function Accept(Sock:longint;var addr:TInetSockAddr;var SockIn,SockOut:text):Boolean;
+Function Connect(Sock:longint;const addr:TInetSockAddr;var SockIn,SockOut:text):Boolean;
+Function Connect(Sock:longint;const addr:TInetSockAddr;var SockIn,SockOut:file):Boolean;
 
 
 
 
 { Utility routines}
 { Utility routines}

+ 2 - 1
rtl/inc/sockovl.inc

@@ -115,7 +115,8 @@ var
   AddrLen  : longint;
   AddrLen  : longint;
 begin
 begin
   Str2UnixSockAddr(addr,UnixAddr,AddrLen);
   Str2UnixSockAddr(addr,UnixAddr,AddrLen);
-  Bind := Bind(Sock, UnixAddr, AddrLen); // what the flying fuck were you thinking?
+  Bind(Sock,UnixAddr,AddrLen);
+  Bind:=(SocketError=0);
 end;
 end;
 
 
 
 

+ 15 - 15
rtl/inc/stdsock.inc

@@ -39,90 +39,90 @@ function fpaccept      (s:cint; addrx : psockaddr; addrlen : psocklen):cint;
 
 
 begin
 begin
  fpaccept:=cfpaccept(s,addrx,addrlen);
  fpaccept:=cfpaccept(s,addrx,addrlen);
- internal_socketerror:=fpgeterrno; 
+ socketerror:=fpgeterrno;
 end;
 end;
 
 
 function fpbind (s:cint; addrx : psockaddr; addrlen : tsocklen):cint;
 function fpbind (s:cint; addrx : psockaddr; addrlen : tsocklen):cint;
 begin
 begin
   fpbind:=cfpbind (s,addrx,addrlen);
   fpbind:=cfpbind (s,addrx,addrlen);
-  internal_socketerror:=fpgeterrno;
+  socketerror:=fpgeterrno;
 end;
 end;
 
 
 function fpconnect     (s:cint; name  : psockaddr; namelen : tsocklen):cint;
 function fpconnect     (s:cint; name  : psockaddr; namelen : tsocklen):cint;
 begin
 begin
   fpconnect:=cfpconnect (s,name,namelen);
   fpconnect:=cfpconnect (s,name,namelen);
-  internal_socketerror:=fpgeterrno;
+  socketerror:=fpgeterrno;
 end;
 end;
 
 
 function fpgetpeername (s:cint; name  : psockaddr; namelen : psocklen):cint;
 function fpgetpeername (s:cint; name  : psockaddr; namelen : psocklen):cint;
 begin
 begin
   fpgetpeername:=cfpgetpeername (s,name,namelen);
   fpgetpeername:=cfpgetpeername (s,name,namelen);
-  internal_socketerror:=fpgeterrno;
+  socketerror:=fpgeterrno;
 end;
 end;
 
 
 function fpgetsockname (s:cint; name  : psockaddr; namelen : psocklen):cint;
 function fpgetsockname (s:cint; name  : psockaddr; namelen : psocklen):cint;
 begin
 begin
   fpgetsockname:=cfpgetsockname(s,name,namelen);
   fpgetsockname:=cfpgetsockname(s,name,namelen);
-  internal_socketerror:=fpgeterrno;
+  socketerror:=fpgeterrno;
 end;
 end;
 
 
 function fpgetsockopt  (s:cint; level:cint; optname:cint; optval:pointer; optlen : psocklen):cint;
 function fpgetsockopt  (s:cint; level:cint; optname:cint; optval:pointer; optlen : psocklen):cint;
 begin
 begin
   fpgetsockopt:=cfpgetsockopt(s,level,optname,optval,optlen);
   fpgetsockopt:=cfpgetsockopt(s,level,optname,optval,optlen);
-  internal_socketerror:=fpgeterrno;
+  socketerror:=fpgeterrno;
 end;
 end;
 
 
 function fplisten      (s:cint; backlog : cint):cint;
 function fplisten      (s:cint; backlog : cint):cint;
 begin
 begin
   fplisten:=cfplisten(s,backlog);
   fplisten:=cfplisten(s,backlog);
-  internal_socketerror:=fpgeterrno;
+  socketerror:=fpgeterrno;
 end;
 end;
 
 
 function fprecv         (s:cint; buf: pointer; len: size_t; flags:cint):ssize_t;
 function fprecv         (s:cint; buf: pointer; len: size_t; flags:cint):ssize_t;
 begin
 begin
   fprecv:= cfprecv      (s,buf,len,flags);
   fprecv:= cfprecv      (s,buf,len,flags);
-  internal_socketerror:=fpgeterrno;
+  socketerror:=fpgeterrno;
 end;
 end;
 
 
 function fprecvfrom    (s:cint; buf: pointer; len: size_t; flags: cint; from : psockaddr; fromlen : psocklen):ssize_t;
 function fprecvfrom    (s:cint; buf: pointer; len: size_t; flags: cint; from : psockaddr; fromlen : psocklen):ssize_t;
 begin
 begin
   fprecvfrom:= cfprecvfrom (s,buf,len,flags,from,fromlen);
   fprecvfrom:= cfprecvfrom (s,buf,len,flags,from,fromlen);
-  internal_socketerror:=fpgeterrno;
+  socketerror:=fpgeterrno;
 end;
 end;
 
 
 function fpsend         (s:cint; msg:pointer; len:size_t; flags:cint):ssize_t;
 function fpsend         (s:cint; msg:pointer; len:size_t; flags:cint):ssize_t;
 begin
 begin
   fpsend:=cfpsend (s,msg,len,flags);
   fpsend:=cfpsend (s,msg,len,flags);
-  internal_socketerror:=fpgeterrno;
+  socketerror:=fpgeterrno;
 end;
 end;
 
 
 function fpsendto       (s:cint; msg:pointer; len:size_t; flags:cint; tox :psockaddr; tolen: tsocklen):ssize_t;
 function fpsendto       (s:cint; msg:pointer; len:size_t; flags:cint; tox :psockaddr; tolen: tsocklen):ssize_t;
 begin
 begin
   fpsendto:=cfpsendto (s,msg,len,flags,tox,tolen);
   fpsendto:=cfpsendto (s,msg,len,flags,tox,tolen);
-  internal_socketerror:=fpgeterrno;
+  socketerror:=fpgeterrno;
 end;
 end;
 
 
 function fpsetsockopt  (s:cint; level:cint; optname:cint; optval:pointer; optlen :tsocklen):cint;
 function fpsetsockopt  (s:cint; level:cint; optname:cint; optval:pointer; optlen :tsocklen):cint;
 begin
 begin
   fpsetsockopt:=cfpsetsockopt(s,level,optname,optval,optlen);
   fpsetsockopt:=cfpsetsockopt(s,level,optname,optval,optlen);
-  internal_socketerror:=fpgeterrno;
+  socketerror:=fpgeterrno;
 end;
 end;
 
 
 function fpshutdown     (s:cint; how:cint):cint;
 function fpshutdown     (s:cint; how:cint):cint;
 begin
 begin
   fpshutdown:=cfpshutdown(s,how);
   fpshutdown:=cfpshutdown(s,how);
-  internal_socketerror:=fpgeterrno;
+  socketerror:=fpgeterrno;
 end;
 end;
 
 
 function fpsocket       (domain:cint; xtype:cint; protocol: cint):cint;
 function fpsocket       (domain:cint; xtype:cint; protocol: cint):cint;
 begin
 begin
   fpsocket:=cfpsocket(domain,xtype,protocol);
   fpsocket:=cfpsocket(domain,xtype,protocol);
-  internal_socketerror:=fpgeterrno;
+  socketerror:=fpgeterrno;
 end;
 end;
 
 
 function fpsocketpair  (d:cint; xtype:cint; protocol:cint; sv:pcint):cint;
 function fpsocketpair  (d:cint; xtype:cint; protocol:cint; sv:pcint):cint;
 begin
 begin
   fpsocketpair:=cfpsocketpair(d,xtype,protocol,sv);
   fpsocketpair:=cfpsocketpair(d,xtype,protocol,sv);
-  internal_socketerror:=fpgeterrno;
+  socketerror:=fpgeterrno;
 end;
 end;
 
 

+ 5 - 2
rtl/linux/unixsock.inc

@@ -48,7 +48,7 @@ Const
   Socket_Sys_RECVMSG     = 17;
   Socket_Sys_RECVMSG     = 17;
 
 
 
 
-Function SocketCall(SockCallNr,a1,a2,a3,a4,a5,a6:TSysParam):longint; inline;
+Function SocketCall(SockCallNr,a1,a2,a3,a4,a5,a6:TSysParam):longint;
 var
 var
   Args:array[1..6] of TSysParam;
   Args:array[1..6] of TSysParam;
 begin
 begin
@@ -59,13 +59,16 @@ begin
   args[5]:=a5;
   args[5]:=a5;
   args[6]:=a6;
   args[6]:=a6;
   SocketCall:=do_Syscall(syscall_nr_socketcall,sockcallnr,TSysParam(@args));
   SocketCall:=do_Syscall(syscall_nr_socketcall,sockcallnr,TSysParam(@args));
+  If SocketCall<0 then
+   SocketError:=fpgetErrno
+  else
+   SocketError:=0;
 end;
 end;
 
 
 
 
 function SocketCall(SockCallNr,a1,a2,a3:TSysParam):longint;
 function SocketCall(SockCallNr,a1,a2,a3:TSysParam):longint;
 begin
 begin
   SocketCall:=SocketCall(SockCallNr,a1,a2,a3,0,0,0);
   SocketCall:=SocketCall(SockCallNr,a1,a2,a3,0,0,0);
-  internal_socketerror:=fpgeterrno;
 end;
 end;
 
 
 function  fpsocket (domain:cint; xtype:cint; protocol: cint):cint;
 function  fpsocket (domain:cint; xtype:cint; protocol: cint):cint;

+ 71 - 68
rtl/linux/unxsockh.inc

@@ -14,76 +14,79 @@
 }
 }
 
 
 Const
 Const
-{* Supported address families. *}
-  AF_UNSPEC     = 0;
-  AF_UNIX       = 1;     { Unix domain sockets          }
-  AF_LOCAL      = 1;     { POSIX name for AF_UNIX       }
-  AF_INET       = 2;     { Internet IP Protocol         }
-  AF_AX25       = 3;     { Amateur Radio AX.25          }
-  AF_IPX        = 4;     { Novell IPX                   }
-  AF_APPLETALK  = 5;     { AppleTalk DDP                }
-  AF_NETROM     = 6;     { Amateur Radio NET/ROM        }
-  AF_BRIDGE     = 7;     { Multiprotocol bridge         }
-  AF_ATMPVC     = 8;     { ATM PVCs                     }
-  AF_X25        = 9;     { Reserved for X.25 project    }
-  AF_INET6      = 10;    { IP version 6                 }
-  AF_ROSE       = 11;    { Amateur Radio X.25 PLP       }
-  AF_DECnet     = 12;    { Reserved for DECnet project  }
-  AF_NETBEUI    = 13;    { Reserved for 802.2LLC project}
-  AF_SECURITY   = 14;    { Security callback pseudo AF }
-  AF_KEY        = 15;    { PF_KEY key management API }
-  AF_NETLINK    = 16;
-  AF_ROUTE      = AF_NETLINK; { Alias to emulate 4.4BSD }
-  AF_PACKET     = 17;    { Packet family                }
-  AF_ASH        = 18;    { Ash                          }
-  AF_ECONET     = 19;    { Acorn Econet                 }
-  AF_ATMSVC     = 20;    { ATM SVCs                     }
-  AF_SNA        = 22;	 { Linux SNA Project (nutters!) }
-  AF_IRDA       = 23;    { IRDA sockets                 }
-  AF_PPPOX	= 24;    { PPPoX sockets                }
-  AF_WANPIPE    = 25;    { Wanpipe API Sockets }
-  AF_LLC        = 26;    { Linux LLC                    }
-  AF_TIPC       = 30;    { TIPC sockets                 }
-  AF_BLUETOOTH  = 31;    { Bluetooth sockets            }
-  AF_MAX        = 32;    { For now.. }
-  
-  SOCK_MAXADDRLEN = 255;             { longest possible addresses }
+//  AF_LOCAL        =1;              { local to host (pipes, portals) }
+  AF_IMPLINK      =3;               { arpanet imp addresses }
+  AF_PUP          =4;              { pup protocols: e.g. BSP }
+  AF_CHAOS        =5;               { mit CHAOS protocols }
+  AF_NS           =6;              { XEROX NS protocols }
+  AF_ISO          =7;              { ISO protocols }
+  AF_OSI          =AF_ISO;
+  AF_ECMA         =8;              { European computer manufacturers }
+  AF_DATAKIT      =9;              { datakit protocols }
+  AF_CCITT        =10;             { CCITT protocols, X.25 etc }
+  AF_SNA          =11;             { IBM SNA }
+  AF_DECnet       =12;             { DECnet }
+  AF_DLI          =13;             { DEC Direct data link interface }
+  AF_LAT          =14;             { LAT }
+  AF_HYLINK       =15;             { NSC Hyperchannel }
+  AF_APPLETALK    =16;             { Apple Talk }
+  AF_ROUTE        =17;             { Internal Routing Protocol }
+  AF_LINK         =18;             { Link layer interface }
+  pseudo_AF_XTP   =19;             { eXpress Transfer Protocol (no AF) }
+  AF_COIP         =20;             { connection-oriented IP, aka ST II }
+  AF_CNT          =21;             { Computer Network Technology }
+  pseudo_AF_RTIP  =22;             { Help Identify RTIP packets }
+  AF_IPX          =23;             { Novell Internet Protocol }
+  AF_SIP          =24;             { Simple Internet Protocol }
+  pseudo_AF_PIP   =25;             { Help Identify PIP packets }
+  AF_ISDN         =26;             { Integrated Services Digital Network}
+  AF_E164         =AF_ISDN;        { CCITT E.164 recommendation }
+  pseudo_AF_KEY   =27;             { Internal key-management function }
+  AF_INET6        =28;             { IPv6 }
+  AF_NATM         =29;             { native ATM access }
+  AF_ATM          =30;             { ATM }
+  pseudo_AF_HDRCMPLT=31;           { Used by BPF to not rewrite headers
+                                    in interface output routine}
+  AF_NETGRAPH     =32;             { Netgraph sockets }
+  AF_MAX          =33;
+
+  SOCK_MAXADDRLEN =255;             { longest possible addresses }
 
 
 {
 {
 * Protocol families, same as address families for now.
 * Protocol families, same as address families for now.
 }
 }
-
-  PF_UNSPEC     = AF_UNSPEC;
-  PF_UNIX       = AF_UNIX;
-  PF_LOCAL      = AF_LOCAL;
-  PF_INET       = AF_INET;
-  PF_AX25       = AF_AX25;
-  PF_IPX        = AF_IPX;
-  PF_APPLETALK  = AF_APPLETALK;
-  PF_NETROM     = AF_NETROM;
-  PF_BRIDGE     = AF_BRIDGE;
-  PF_ATMPVC     = AF_ATMPVC;
-  PF_X25        = AF_X25;
-  PF_INET6      = AF_INET6;
-  PF_ROSE       = AF_ROSE;
-  PF_DECnet     = AF_DECnet;
-  PF_NETBEUI    = AF_NETBEUI;
-  PF_SECURITY   = AF_SECURITY;
-  PF_KEY        = AF_KEY;
-  PF_NETLINK    = AF_NETLINK;
-  PF_ROUTE      = AF_ROUTE;
-  PF_PACKET     = AF_PACKET;
-  PF_ASH        = AF_ASH;
-  PF_ECONET     = AF_ECONET;
-  PF_ATMSVC     = AF_ATMSVC;
-  PF_SNA        = AF_SNA;
-  PF_IRDA       = AF_IRDA;
-  PF_PPPOX	= AF_PPPOX;
-  PF_WANPIPE    = AF_WANPIPE;
-  PF_LLC        = AF_LLC;
-  PF_TIPC       = AF_TIPC;
-  PF_BLUETOOTH  = AF_BLUETOOTH;
-  PF_MAX        = AF_MAX;
+//  PF_LOCAL        =AF_LOCAL;
+  PF_IMPLINK      =AF_IMPLINK;
+  PF_PUP          =AF_PUP;
+  PF_CHAOS        =AF_CHAOS;
+  PF_NS           =AF_NS;
+  PF_ISO          =AF_ISO;
+  PF_OSI          =AF_ISO;
+  PF_ECMA         =AF_ECMA;
+  PF_DATAKIT      =AF_DATAKIT;
+  PF_CCITT        =AF_CCITT;
+  PF_SNA          =AF_SNA;
+  PF_DECnet       =AF_DECnet;
+  PF_DLI          =AF_DLI;
+  PF_LAT          =AF_LAT;
+  PF_HYLINK       =AF_HYLINK;
+  PF_APPLETALK    =AF_APPLETALK;
+  PF_ROUTE        =AF_ROUTE;
+  PF_LINK         =AF_LINK;
+  PF_XTP          =pseudo_AF_XTP;  { really just proto family, no AF }
+  PF_COIP         =AF_COIP;
+  PF_CNT          =AF_CNT;
+  PF_SIP          =AF_SIP;
+  PF_IPX          =AF_IPX;         { same format as AF_NS }
+  PF_RTIP         =pseudo_AF_RTIP; { same format as AF_INET }
+  PF_PIP          =pseudo_AF_PIP;
+  PF_ISDN         =AF_ISDN;
+  PF_KEY          =pseudo_AF_KEY;
+  PF_INET6        =AF_INET6;
+  PF_NATM         =AF_NATM;
+  PF_ATM          =AF_ATM;
+  PF_NETGRAPH     =AF_NETGRAPH;
+  PF_MAX          =AF_MAX;
 
 
 
 
 { Maximum queue length specifiable by listen.  }
 { Maximum queue length specifiable by listen.  }
@@ -170,9 +173,9 @@ Const
          IPPROTO_RAW     = 255;       { Raw IP packets.  }
          IPPROTO_RAW     = 255;       { Raw IP packets.  }
          IPPROTO_MAX     = 255;
          IPPROTO_MAX     = 255;
 //from /usr/include/bits/in.h
 //from /usr/include/bits/in.h
-{{ Options for use with etsockopt' and etsockopt' at the IP level.
+{/* Options for use with etsockopt' and etsockopt' at the IP level.
    The first word in the comment at the right is the data type used;
    The first word in the comment at the right is the data type used;
-   "bool" means a boolean value stored in an 	nt'.  }
+   "bool" means a boolean value stored in an 	nt'.  */
 }
 }
         IP_OPTIONS              = 4;               { ip_opts; IP per-packet options.  }
         IP_OPTIONS              = 4;               { ip_opts; IP per-packet options.  }
         IP_HDRINCL              = 3;               { int; Header is included with data.  }
         IP_HDRINCL              = 3;               { int; Header is included with data.  }

+ 0 - 58
rtl/netware/netwsockh.inc

@@ -1,58 +0,0 @@
-const
-       AF_UNSPEC = winsock.AF_UNSPEC;
-       AF_UNIX = winsock.AF_UNIX;
-       AF_INET = winsock.AF_INET;
-       AF_IMPLINK = winsock.AF_IMPLINK;
-       AF_PUP = winsock.AF_PUP;
-       AF_CHAOS = winsock.AF_CHAOS;
-       AF_NS = winsock.AF_NS;
-       AF_IPX = winsock.AF_IPX;
-       AF_ISO = winsock.AF_ISO;
-       AF_OSI = winsock.AF_OSI;
-       AF_ECMA = winsock.AF_ECMA;
-       AF_DATAKIT = winsock.AF_DATAKIT;
-       AF_CCITT = winsock.AF_CCITT;
-       AF_SNA = winsock.AF_SNA;
-       AF_DECnet = winsock.AF_DECnet;
-       AF_DLI = winsock.AF_DLI;
-       AF_LAT = winsock.AF_LAT;
-       AF_HYLINK = winsock.AF_HYLINK;
-       AF_APPLETALK = winsock.AF_APPLETALK;
-       AF_VOICEVIEW = winsock.AF_VOICEVIEW;
-       AF_FIREFOX = winsock.AF_FIREFOX;
-       AF_UNKNOWN1 = winsock.AF_UNKNOWN1;
-       AF_BAN = winsock.AF_BAN;
-       AF_ATM = winsock.AF_ATM;
-       AF_INET6 = winsock.AF_INET6;
-       AF_MAX = winsock.AF_MAX;
-
-       PF_UNSPEC = AF_UNSPEC;
-       PF_UNIX = AF_UNIX;
-       PF_INET = AF_INET;
-       PF_IMPLINK = AF_IMPLINK;
-       PF_PUP = AF_PUP;
-       PF_CHAOS = AF_CHAOS;
-       PF_NS = AF_NS;
-       PF_IPX = AF_IPX;
-       PF_ISO = AF_ISO;
-       PF_OSI = AF_OSI;
-       PF_ECMA = AF_ECMA;
-       PF_DATAKIT = AF_DATAKIT;
-       PF_CCITT = AF_CCITT;
-       PF_SNA = AF_SNA;
-       PF_DECnet = AF_DECnet;
-       PF_DLI = AF_DLI;
-       PF_LAT = AF_LAT;
-       PF_HYLINK = AF_HYLINK;
-       PF_APPLETALK = AF_APPLETALK;
-       PF_VOICEVIEW = AF_VOICEVIEW;
-       PF_FIREFOX = AF_FIREFOX;
-       PF_UNKNOWN1 = AF_UNKNOWN1;
-       PF_BAN = AF_BAN;
-       PF_ATM = AF_ATM;
-       PF_INET6 = AF_INET6;
-       PF_MAX = AF_MAX;
-       
-  INVALID_SOCKET = -1;
-  SOCKET_ERROR = -1;
-

+ 158 - 68
rtl/netware/sockets.pp

@@ -35,21 +35,11 @@ Type
   tsocklen=cint;
   tsocklen=cint;
   psocklen=^tsocklen;
   psocklen=^tsocklen;
 
 
-const
-  EsockEINTR            = WSAEINTR;
-  EsockEBADF            = WSAEBADF;
-  EsockEFAULT           = WSAEFAULT;
-  EsockEINVAL           = WSAEINVAL;
-  EsockEACCESS         = WSAEACCES;
-  EsockEMFILE          = WSAEMFILE;
-  EsockEMSGSIZE        = WSAEMSGSIZE;
-  EsockENOBUFS         = WSAENOBUFS;
-  EsockENOTCONN        = WSAENOTCONN;
-  EsockENOTSOCK        = WSAENOTSOCK;
-  EsockEPROTONOSUPPORT = WSAEPROTONOSUPPORT;
-  EsockEWOULDBLOCK     = WSAEWOULDBLOCK;
-
-{$i netwsockh.inc}
+
+  Const
+     AF_MAX          = WinSock.AF_MAX;
+     PF_MAX          = AF_MAX;
+
 {$i socketsh.inc}
 {$i socketsh.inc}
 
 
 Implementation
 Implementation
@@ -70,45 +60,70 @@ Implementation
 //function fpsocket     (domain:cint; xtype:cint; protocol: cint):cint;
 //function fpsocket     (domain:cint; xtype:cint; protocol: cint):cint;
 
 
 
 
-function SocketError: cint;
-begin
- SocketError := WSAGetLastError;
-end;
-
 function fpsocket       (domain:cint; xtype:cint; protocol: cint):cint;
 function fpsocket       (domain:cint; xtype:cint; protocol: cint):cint;
 begin
 begin
   fpSocket:=WinSock.Socket(Domain,xtype,ProtoCol);
   fpSocket:=WinSock.Socket(Domain,xtype,ProtoCol);
+  if fpSocket<0 then
+    SocketError:=WSAGetLastError
+  else
+    SocketError:=0;
 end;
 end;
 
 
 function fpsend (s:cint; msg:pointer; len:size_t; flags:cint):ssize_t;
 function fpsend (s:cint; msg:pointer; len:size_t; flags:cint):ssize_t;
 begin
 begin
   fpSend:=WinSock.Send(S,msg,len,flags);
   fpSend:=WinSock.Send(S,msg,len,flags);
+  if fpSend<0 then
+    SocketError:=WSAGetLastError
+  else
+    SocketError:=0;
 end;
 end;
 
 
 function fpsendto (s:cint; msg:pointer; len:size_t; flags:cint; tox :psockaddr; tolen: tsocklen):ssize_t;
 function fpsendto (s:cint; msg:pointer; len:size_t; flags:cint; tox :psockaddr; tolen: tsocklen):ssize_t;
 begin
 begin
   // Dubious construct, this should be checked. (IPV6 fails ?)
   // Dubious construct, this should be checked. (IPV6 fails ?)
   fpSendTo:=WinSock.SendTo(S,msg,Len,Flags,Winsock.TSockAddr(tox^),toLen);
   fpSendTo:=WinSock.SendTo(S,msg,Len,Flags,Winsock.TSockAddr(tox^),toLen);
+  if fpSendTo<0 then
+    SocketError:=WSAGetLastError
+  else
+    SocketError:=0;
 end;
 end;
 
 
 function fprecv         (s:cint; buf: pointer; len: size_t; flags: cint):ssize_t;
 function fprecv         (s:cint; buf: pointer; len: size_t; flags: cint):ssize_t;
 begin
 begin
   fpRecv:=WinSock.Recv(S,Buf,Len,Flags);
   fpRecv:=WinSock.Recv(S,Buf,Len,Flags);
+  if fpRecv<0 then
+    SocketError:=WSAGetLastError
+  else
+    SocketError:=0;
 end;
 end;
 
 
 function fprecvfrom    (s:cint; buf: pointer; len: size_t; flags: cint; from : psockaddr; fromlen : psocklen):ssize_t;
 function fprecvfrom    (s:cint; buf: pointer; len: size_t; flags: cint; from : psockaddr; fromlen : psocklen):ssize_t;
+
 begin
 begin
-  fpRecvFrom:=WinSock.RecvFrom(S,Buf,Len,Flags,Winsock.TSockAddr(from^),FromLen^);
+fpRecvFrom:=WinSock.RecvFrom(S,Buf,Len,Flags,Winsock.TSockAddr(from^),FromLen^);
+  if fpRecvFrom<0 then
+    SocketError:=WSAGetLastError
+  else
+    SocketError:=0;
 end;
 end;
 
 
 function fpconnect     (s:cint; name  : psockaddr; namelen : tsocklen):cint;
 function fpconnect     (s:cint; name  : psockaddr; namelen : tsocklen):cint;
+
 begin
 begin
   fpConnect:=WinSock.Connect(S,WinSock.TSockAddr(name^),nameLen);
   fpConnect:=WinSock.Connect(S,WinSock.TSockAddr(name^),nameLen);
+  if fpConnect<0 then
+    SocketError:=WSAGetLastError
+  else
+    SocketError:=0;
 end;
 end;
 
 
 function fpshutdown     (s:cint; how:cint):cint;
 function fpshutdown     (s:cint; how:cint):cint;
 begin
 begin
   fpShutDown:=WinSock.ShutDown(S,How);
   fpShutDown:=WinSock.ShutDown(S,How);
+  if fpShutDown<0 then
+    SocketError:=WSAGetLastError
+  else
+    SocketError:=0;
 end;
 end;
 
 
 Function socket(Domain,SocketType,Protocol:Longint):Longint;
 Function socket(Domain,SocketType,Protocol:Longint):Longint;
@@ -117,11 +132,13 @@ begin
 end;
 end;
 
 
 Function Send(Sock:Longint;Const Buf;BufLen,Flags:Longint):Longint;
 Function Send(Sock:Longint;Const Buf;BufLen,Flags:Longint):Longint;
+
 begin
 begin
   send:=fpsend(sock,@buf,buflen,flags);
   send:=fpsend(sock,@buf,buflen,flags);
 end;
 end;
 
 
 Function SendTo(Sock:Longint;Const Buf;BufLen,Flags:Longint;Var Addr; AddrLen : Longint):Longint;
 Function SendTo(Sock:Longint;Const Buf;BufLen,Flags:Longint;Var Addr; AddrLen : Longint):Longint;
+
 begin
 begin
   sendto:=fpsendto(sock,@buf,buflen,flags,@addr,addrlen);
   sendto:=fpsendto(sock,@buf,buflen,flags,@addr,addrlen);
 end;
 end;
@@ -137,38 +154,70 @@ begin
 end;
 end;
 
 
 function fpbind (s:cint; addrx : psockaddr; addrlen : tsocklen):cint;
 function fpbind (s:cint; addrx : psockaddr; addrlen : tsocklen):cint;
+
 begin
 begin
   fpbind:=WinSock.Bind(S,WinSock.PSockAddr(Addrx),AddrLen);
   fpbind:=WinSock.Bind(S,WinSock.PSockAddr(Addrx),AddrLen);
+  if fpbind<0 then
+       SocketError:=WSAGetLastError
+  else
+       SocketError:=0;
 end;
 end;
 
 
 function fplisten      (s:cint; backlog : cint):cint;
 function fplisten      (s:cint; backlog : cint):cint;
+
 begin
 begin
   fplisten:=WinSock.Listen(S,backlog);
   fplisten:=WinSock.Listen(S,backlog);
+  if fplisten<0 then
+       SocketError:=WSAGetLastError
+  else
+       SocketError:=0;
 end;
 end;
 
 
 function fpaccept      (s:cint; addrx : psockaddr; addrlen : psocklen):cint;
 function fpaccept      (s:cint; addrx : psockaddr; addrlen : psocklen):cint;
 begin
 begin
   fpAccept:=WinSock.Accept(S,WinSock.PSockAddr(Addrx),plongint(AddrLen));
   fpAccept:=WinSock.Accept(S,WinSock.PSockAddr(Addrx),plongint(AddrLen));
+  if fpAccept<0 then
+    SocketError:=WSAGetLastError
+  else
+    SocketError:=0;
 end;
 end;
 
 
 function fpgetsockname (s:cint; name  : psockaddr; namelen : psocklen):cint;
 function fpgetsockname (s:cint; name  : psockaddr; namelen : psocklen):cint;
+
 begin
 begin
   fpGetSockName:=WinSock.GetSockName(S,WinSock.TSockAddr(name^),nameLen^);
   fpGetSockName:=WinSock.GetSockName(S,WinSock.TSockAddr(name^),nameLen^);
+  if fpGetSockName<0 then
+    SocketError:=WSAGetLastError
+  else
+    SocketError:=0;
 end;
 end;
 
 
 function fpgetpeername (s:cint; name  : psockaddr; namelen : psocklen):cint;
 function fpgetpeername (s:cint; name  : psockaddr; namelen : psocklen):cint;
 begin
 begin
   fpGetPeerName:=WinSock.GetPeerName(S,WinSock.TSockAddr(name^),NameLen^);
   fpGetPeerName:=WinSock.GetPeerName(S,WinSock.TSockAddr(name^),NameLen^);
+  if fpGetPeerName<0 then
+    SocketError:=WSAGetLastError
+  else
+    SocketError:=0;
 end;
 end;
 
 
 function fpgetsockopt  (s:cint; level:cint; optname:cint; optval:pointer; optlen : psocklen):cint;
 function fpgetsockopt  (s:cint; level:cint; optname:cint; optval:pointer; optlen : psocklen):cint;
 begin
 begin
   fpGetSockOpt:=WinSock.GetSockOpt(S,Level,OptName,OptVal,OptLen^);
   fpGetSockOpt:=WinSock.GetSockOpt(S,Level,OptName,OptVal,OptLen^);
+  if fpGetSockOpt<0 then
+    SocketError:=WSAGetLastError
+  else
+    SocketError:=0;
 end;
 end;
 
 
 function fpsetsockopt  (s:cint; level:cint; optname:cint; optval:pointer; optlen :tsocklen):cint;
 function fpsetsockopt  (s:cint; level:cint; optname:cint; optval:pointer; optlen :tsocklen):cint;
+
 begin
 begin
   fpSetSockOpt:=WinSock.SetSockOpt(S,Level,OptName,OptVal,OptLen);
   fpSetSockOpt:=WinSock.SetSockOpt(S,Level,OptName,OptVal,OptLen);
+  if fpSetSockOpt<0 then
+    SocketError:=WSAGetLastError
+  else
+    SocketError:=0;
 end;
 end;
 
 
 function fpsocketpair  (d:cint; xtype:cint; protocol:cint; sv:pcint):cint;
 function fpsocketpair  (d:cint; xtype:cint; protocol:cint; sv:pcint):cint;
@@ -177,33 +226,48 @@ begin
 end;
 end;
 
 
 Function CloseSocket(Sock:Longint):Longint;
 Function CloseSocket(Sock:Longint):Longint;
+var i : longint;
 begin
 begin
-  CloseSocket := Winsock.CloseSocket (Sock);
+  i := Winsock.CloseSocket (Sock);
+  if i <> 0 then
+  begin
+    SocketError:=WSAGetLastError;
+    CloseSocket := i;
+  end else
+  begin
+    CloseSocket := 0;
+    SocketError := 0;
+  end;
 end;
 end;
 
 
 Function Bind(Sock:Longint;Const Addr;AddrLen:Longint):Boolean;
 Function Bind(Sock:Longint;Const Addr;AddrLen:Longint):Boolean;
+
 begin
 begin
-  Bind:=fpBind(Sock,@Addr,AddrLen)=0;
+  bind:=fpBind(Sock,@Addr,AddrLen)=0;
 end;
 end;
 
 
 Function Listen(Sock,MaxConnect:Longint):Boolean;
 Function Listen(Sock,MaxConnect:Longint):Boolean;
+
 begin
 begin
   Listen:=fplisten(Sock,MaxConnect)=0;
   Listen:=fplisten(Sock,MaxConnect)=0;
 end;
 end;
 
 
 Function Accept(Sock:Longint;Var Addr;Var Addrlen:Longint):Longint;
 Function Accept(Sock:Longint;Var Addr;Var Addrlen:Longint):Longint;
+
 begin
 begin
   Accept:=FPAccept(sock,@addr,@addrlen);
   Accept:=FPAccept(sock,@addr,@addrlen);
 end;
 end;
 
 
 Function Shutdown(Sock:Longint;How:Longint):Longint;
 Function Shutdown(Sock:Longint;How:Longint):Longint;
+
 begin
 begin
- Shutdown:=fpshutdown(sock,how);
+ shutdown:=fpshutdown(sock,how);
 end;
 end;
 
 
 Function Connect(Sock:Longint;Const Addr;Addrlen:Longint):Boolean;
 Function Connect(Sock:Longint;Const Addr;Addrlen:Longint):Boolean;
+
 begin
 begin
- Connect:=fpconnect(sock,@addr,addrlen)=0;
+ connect:=fpconnect(sock,@addr,addrlen)=0;
 end;
 end;
 
 
 Function GetSocketName(Sock:Longint;Var Addr;Var Addrlen:Longint):Longint;
 Function GetSocketName(Sock:Longint;Var Addr;Var Addrlen:Longint):Longint;
@@ -222,6 +286,7 @@ begin
 end;
 end;
 
 
 Function SetSocketOptions(Sock,Level,OptName:Longint;Const OptVal;optlen:longint):Longint;
 Function SetSocketOptions(Sock,Level,OptName:Longint;Const OptVal;optlen:longint):Longint;
+
 begin
 begin
  SetSocketOptions:=fpsetsockopt(sock,level,optname,@optval,optlen);
  SetSocketOptions:=fpsetsockopt(sock,level,optname,@optval,optlen);
 end;
 end;
@@ -239,55 +304,80 @@ function fpWrite(handle : longint;Const bufptr;size : dword) : dword;
 begin
 begin
   fpWrite := dword(WinSock.send(handle, bufptr, size, 0));
   fpWrite := dword(WinSock.send(handle, bufptr, size, 0));
   if fpWrite = dword(SOCKET_ERROR) then
   if fpWrite = dword(SOCKET_ERROR) then
+  begin
+    SocketError := WSAGetLastError;
     fpWrite := 0;
     fpWrite := 0;
+  end
+  else
+    SocketError := 0;
 end;
 end;
 
 
 function fpRead(handle : longint;var bufptr;size : dword) : dword;
 function fpRead(handle : longint;var bufptr;size : dword) : dword;
-var
-  d : dword;
-begin
-  if ioctlsocket(handle,FIONREAD,@d) = SOCKET_ERROR then
-    begin
-      fpRead:=0;
-      exit;
-    end;
-  if d>0 then
-    begin
-      if size>d then
-        size:=d;
-      fpRead := dword(WinSock.recv(handle, bufptr, size, 0));
-      if fpRead = dword(SOCKET_ERROR) then
-        fpRead := 0;
-    end;
-end;
+  var
+     d : dword;
+
+  begin
+     if ioctlsocket(handle,FIONREAD,@d) = SOCKET_ERROR then
+       begin
+         SocketError:=WSAGetLastError;
+         fpRead:=0;
+         exit;
+       end;
+     if d>0 then
+       begin
+         if size>d then
+           size:=d;
+         fpRead := dword(WinSock.recv(handle, bufptr, size, 0));
+         if fpRead = dword(SOCKET_ERROR) then
+         begin
+           SocketError:= WSAGetLastError;
+           fpRead := 0;
+         end else
+           SocketError:=0;
+       end
+     else
+       SocketError:=0;
+  end;
 {$else}
 {$else}
 { mimic the linux fdWrite/fdRead calls for the file/text socket wrapper }
 { mimic the linux fdWrite/fdRead calls for the file/text socket wrapper }
-function fpWrite(handle : longint;Const bufptr;size : dword) : dword;
-begin
-  fpWrite := dword(WinSock.send(handle, bufptr, size, 0));
-  if fpWrite = dword(SOCKET_ERROR) then
-    fpWrite := 0;
-end;
-
-function fpRead(handle : longint;var bufptr;size : dword) : dword;
-var
-  d : dword;
-begin
-  if ioctlsocket(handle,FIONREAD,@d) = SOCKET_ERROR then
-    begin
-      fpRead:=0;
-      exit;
-    end;
-  if d>0 then
-    begin
-      if size>d then
-        size:=d;
-      fpRead := dword(WinSock.recv(handle, bufptr, size, 0));
-      if fpRead = dword(SOCKET_ERROR) then
-        fpRead := 0;
-    end;
-end;
-
+function fdWrite(handle : longint;Const bufptr;size : dword) : dword;
+begin
+  fdWrite := dword(WinSock.send(handle, bufptr, size, 0));
+  if fdWrite = dword(SOCKET_ERROR) then
+  begin
+    SocketError := WSAGetLastError;
+    fdWrite := 0;
+  end
+  else
+    SocketError := 0;
+end;
+
+function fdRead(handle : longint;var bufptr;size : dword) : dword;
+  var
+     d : dword;
+
+  begin
+     if ioctlsocket(handle,FIONREAD,@d) = SOCKET_ERROR then
+       begin
+         SocketError:=WSAGetLastError;
+         fdRead:=0;
+         exit;
+       end;
+     if d>0 then
+       begin
+         if size>d then
+           size:=d;
+         fdRead := dword(WinSock.recv(handle, bufptr, size, 0));
+         if fdRead = dword(SOCKET_ERROR) then
+         begin
+           SocketError:= WSAGetLastError;
+           fdRead := 0;
+         end else
+           SocketError:=0;
+       end
+     else
+       SocketError:=0;
+  end;
 {$endif}
 {$endif}
 
 
 {$i sockets.inc}
 {$i sockets.inc}

+ 0 - 57
rtl/netwlibc/netwsockh.inc

@@ -1,57 +0,0 @@
-const
-       AF_UNSPEC = winsock.AF_UNSPEC;
-       AF_UNIX = winsock.AF_UNIX;
-       AF_INET = winsock.AF_INET;
-       AF_IMPLINK = winsock.AF_IMPLINK;
-       AF_PUP = winsock.AF_PUP;
-       AF_CHAOS = winsock.AF_CHAOS;
-       AF_NS = winsock.AF_NS;
-       AF_IPX = winsock.AF_IPX;
-       AF_ISO = winsock.AF_ISO;
-       AF_OSI = winsock.AF_OSI;
-       AF_ECMA = winsock.AF_ECMA;
-       AF_DATAKIT = winsock.AF_DATAKIT;
-       AF_CCITT = winsock.AF_CCITT;
-       AF_SNA = winsock.AF_SNA;
-       AF_DECnet = winsock.AF_DECnet;
-       AF_DLI = winsock.AF_DLI;
-       AF_LAT = winsock.AF_LAT;
-       AF_HYLINK = winsock.AF_HYLINK;
-       AF_APPLETALK = winsock.AF_APPLETALK;
-       AF_VOICEVIEW = winsock.AF_VOICEVIEW;
-       AF_FIREFOX = winsock.AF_FIREFOX;
-       AF_UNKNOWN1 = winsock.AF_UNKNOWN1;
-       AF_BAN = winsock.AF_BAN;
-       AF_ATM = winsock.AF_ATM;
-       AF_INET6 = winsock.AF_INET6;
-       AF_MAX = winsock.AF_MAX;
-
-       PF_UNSPEC = AF_UNSPEC;
-       PF_UNIX = AF_UNIX;
-       PF_INET = AF_INET;
-       PF_IMPLINK = AF_IMPLINK;
-       PF_PUP = AF_PUP;
-       PF_CHAOS = AF_CHAOS;
-       PF_NS = AF_NS;
-       PF_IPX = AF_IPX;
-       PF_ISO = AF_ISO;
-       PF_OSI = AF_OSI;
-       PF_ECMA = AF_ECMA;
-       PF_DATAKIT = AF_DATAKIT;
-       PF_CCITT = AF_CCITT;
-       PF_SNA = AF_SNA;
-       PF_DECnet = AF_DECnet;
-       PF_DLI = AF_DLI;
-       PF_LAT = AF_LAT;
-       PF_HYLINK = AF_HYLINK;
-       PF_APPLETALK = AF_APPLETALK;
-       PF_VOICEVIEW = AF_VOICEVIEW;
-       PF_FIREFOX = AF_FIREFOX;
-       PF_UNKNOWN1 = AF_UNKNOWN1;
-       PF_BAN = AF_BAN;
-       PF_ATM = AF_ATM;
-       PF_INET6 = AF_INET6;
-       PF_MAX = AF_MAX;
-       
-  INVALID_SOCKET = -1;
-  SOCKET_ERROR = -1;

+ 14 - 24
rtl/netwlibc/sockets.pp

@@ -34,21 +34,11 @@ Type
   tsocklen=cint;
   tsocklen=cint;
   psocklen=^tsocklen;
   psocklen=^tsocklen;
 
 
-const
-  EsockEINTR            = WSAEINTR;
-  EsockEBADF            = WSAEBADF;
-  EsockEFAULT           = WSAEFAULT;
-  EsockEINVAL           = WSAEINVAL;
-  EsockEACCESS         = WSAEACCES;
-  EsockEMFILE          = WSAEMFILE;
-  EsockEMSGSIZE        = WSAEMSGSIZE;
-  EsockENOBUFS         = WSAENOBUFS;
-  EsockENOTCONN        = WSAENOTCONN;
-  EsockENOTSOCK        = WSAENOTSOCK;
-  EsockEPROTONOSUPPORT = WSAEPROTONOSUPPORT;
-  EsockEWOULDBLOCK     = WSAEWOULDBLOCK;
-
-{$i netwsockh.inc}
+
+  Const
+     AF_MAX          = WinSock.AF_MAX;
+     PF_MAX          = AF_MAX;
+
 {$i socketsh.inc}
 {$i socketsh.inc}
 
 
 Implementation
 Implementation
@@ -349,19 +339,19 @@ function fpRead(handle : longint;var bufptr;size : dword) : dword;
   end;
   end;
 {$else}
 {$else}
 { mimic the linux fdWrite/fdRead calls for the file/text socket wrapper }
 { mimic the linux fdWrite/fdRead calls for the file/text socket wrapper }
-function fpWrite(handle : longint;Const bufptr;size : dword) : dword;
+function fdWrite(handle : longint;Const bufptr;size : dword) : dword;
 begin
 begin
-  fpWrite := dword(WinSock.send(handle, bufptr, size, 0));
-  if fpWrite = dword(SOCKET_ERROR) then
+  fdWrite := dword(WinSock.send(handle, bufptr, size, 0));
+  if fdWrite = dword(SOCKET_ERROR) then
   begin
   begin
     SocketError := WSAGetLastError;
     SocketError := WSAGetLastError;
-    fpWrite := 0;
+    fdWrite := 0;
   end
   end
   else
   else
     SocketError := 0;
     SocketError := 0;
 end;
 end;
 
 
-function fpRead(handle : longint;var bufptr;size : dword) : dword;
+function fdRead(handle : longint;var bufptr;size : dword) : dword;
   var
   var
      d : dword;
      d : dword;
 
 
@@ -369,18 +359,18 @@ function fpRead(handle : longint;var bufptr;size : dword) : dword;
      if ioctlsocket(handle,FIONREAD,@d) = SOCKET_ERROR then
      if ioctlsocket(handle,FIONREAD,@d) = SOCKET_ERROR then
        begin
        begin
          SocketError:=WSAGetLastError;
          SocketError:=WSAGetLastError;
-         fpread:=0;
+         fdRead:=0;
          exit;
          exit;
        end;
        end;
      if d>0 then
      if d>0 then
        begin
        begin
          if size>d then
          if size>d then
            size:=d;
            size:=d;
-         fpRead := dword(WinSock.recv(handle, bufptr, size, 0));
-         if fpRead = dword(SOCKET_ERROR) then
+         fdRead := dword(WinSock.recv(handle, bufptr, size, 0));
+         if fdRead = dword(SOCKET_ERROR) then
          begin
          begin
            SocketError:= WSAGetLastError;
            SocketError:= WSAGetLastError;
-           fpRead := 0;
+           fdRead := 0;
          end else
          end else
            SocketError:=0;
            SocketError:=0;
        end
        end

+ 0 - 121
rtl/openbsd/unxsockh.inc

@@ -1,121 +0,0 @@
-
-const
-  {
-   * Address families.
-    }
-
-  { unspecified  }
-     AF_UNSPEC = 0;
-  { local to host (pipes, portals)  }
-     AF_LOCAL = 1;
-  { backward compatibility  }
-     AF_UNIX = AF_LOCAL;
-  { internetwork: UDP, TCP, etc.  }
-     AF_INET = 2;
-  { arpanet imp addresses  }
-     AF_IMPLINK = 3;
-  { pup protocols: e.g. BSP  }
-     AF_PUP = 4;
-  { mit CHAOS protocols  }
-     AF_CHAOS = 5;
-  { XEROX NS protocols  }
-     AF_NS = 6;
-  { ISO protocols  }
-     AF_ISO = 7;
-     AF_OSI = AF_ISO;
-  { european computer manufacturers  }
-     AF_ECMA = 8;
-  { datakit protocols  }
-     AF_DATAKIT = 9;
-  { CCITT protocols, X.25 etc  }
-     AF_CCITT = 10;
-  { IBM SNA  }
-     AF_SNA = 11;
-  { DECnet  }
-     AF_DECnet = 12;
-  { DEC Direct data link interface  }
-     AF_DLI = 13;
-  { LAT  }
-     AF_LAT = 14;
-  { NSC Hyperchannel  }
-     AF_HYLINK = 15;
-  { Apple Talk  }
-     AF_APPLETALK = 16;
-  { Internal Routing Protocol  }
-     AF_ROUTE = 17;
-  { Link layer interface  }
-     AF_LINK = 18;
-  { eXpress Transfer Protocol (no AF)  }
-     pseudo_AF_XTP = 19;
-  { connection-oriented IP, aka ST II  }
-     AF_COIP = 20;
-  { Computer Network Technology  }
-     AF_CNT = 21;
-  { Help Identify RTIP packets  }
-     pseudo_AF_RTIP = 22;
-  { Novell Internet Protocol  }
-     AF_IPX = 23;
-  { IPv6  }
-     AF_INET6 = 24;
-  { Help Identify PIP packets  }
-     pseudo_AF_PIP = 25;
-  { Integrated Services Digital Network }
-     AF_ISDN = 26;
-  { CCITT E.164 recommendation  }
-     AF_E164 = AF_ISDN;
-  { native ATM access  }
-     AF_NATM = 27;
-     AF_ENCAP = 28;
-  { Simple Internet Protocol  }
-     AF_SIP = 29;
-     AF_KEY = 30;
-  { Used by BPF to not rewrite headers
-  					   in interface output routine  }
-     pseudo_AF_HDRCMPLT = 31;
-  { Bluetooth  }
-     AF_BLUETOOTH = 32;
-     AF_MAX = 33;
-  {
-   * Protocol families, same as address families for now.
-    }
-     PF_UNSPEC = AF_UNSPEC;
-     PF_LOCAL = AF_LOCAL;
-  { backward compatibility  }
-     PF_UNIX = PF_LOCAL;
-     PF_INET = AF_INET;
-     PF_IMPLINK = AF_IMPLINK;
-     PF_PUP = AF_PUP;
-     PF_CHAOS = AF_CHAOS;
-     PF_NS = AF_NS;
-     PF_ISO = AF_ISO;
-     PF_OSI = AF_ISO;
-     PF_ECMA = AF_ECMA;
-     PF_DATAKIT = AF_DATAKIT;
-     PF_CCITT = AF_CCITT;
-     PF_SNA = AF_SNA;
-     PF_DECnet = AF_DECnet;
-     PF_DLI = AF_DLI;
-     PF_LAT = AF_LAT;
-     PF_HYLINK = AF_HYLINK;
-     PF_APPLETALK = AF_APPLETALK;
-     PF_ROUTE = AF_ROUTE;
-     PF_LINK = AF_LINK;
-  { really just proto family, no AF  }
-     PF_XTP = pseudo_AF_XTP;
-     PF_COIP = AF_COIP;
-     PF_CNT = AF_CNT;
-  { same format as AF_NS  }
-     PF_IPX = AF_IPX;
-     PF_INET6 = AF_INET6;
-  { same format as AF_INET  }
-     PF_RTIP = pseudo_AF_RTIP;
-     PF_PIP = pseudo_AF_PIP;
-     PF_ISDN = AF_ISDN;
-     PF_NATM = AF_NATM;
-     PF_ENCAP = AF_ENCAP;
-     PF_SIP = AF_SIP;
-     PF_KEY = AF_KEY;
-     PF_BPF = pseudo_AF_HDRCMPLT;
-     PF_BLUETOOTH = AF_BLUETOOTH;
-     PF_MAX = AF_MAX;
-

+ 128 - 35
rtl/os2/sockets.pas

@@ -25,9 +25,6 @@ Uses
 
 
 Const
 Const
 //  AF_LOCAL       = so32dll.AF_LOCAL;
 //  AF_LOCAL       = so32dll.AF_LOCAL;
-  AF_UNSPEC      = so32dll.AF_UNSPEC;
-  AF_LOCAL       = so32dll.AF_LOCAL;
-  AF_UNIX        = so32dll.AF_UNIX;
   AF_OS2         = so32dll.AF_OS2;
   AF_OS2         = so32dll.AF_OS2;
   AF_IMPLINK     = so32dll.AF_IMPLINK;     // arpanet imp addresses
   AF_IMPLINK     = so32dll.AF_IMPLINK;     // arpanet imp addresses
   AF_PUP         = so32dll.AF_PUP;         // pup protocols: e.g. BSP
   AF_PUP         = so32dll.AF_PUP;         // pup protocols: e.g. BSP
@@ -96,19 +93,6 @@ Const
 
 
   PF_MAX       = so32dll.PF_MAX;
   PF_MAX       = so32dll.PF_MAX;
 
 
-const EsockEINTR  = SOCEINTR;
-      EsockEBADF  = SOCEBADF;
-      EsockEFAULT = SOCEFAULT;
-      EsockEINVAL = SOCEINVAL;
-      EsockEACCESS = SOCEACCES;
-      EsockEMFILE  = SOCEMFILE;
-      EsockEMSGSIZE = SOCEMSGSIZE;
-      EsockENOBUFS = SOCENOBUFS;
-      EsockENOTCONN = SOCENOTCONN;
-      EsockENOTSOCK = SOCENOTSOCK;
-      EsockEPROTONOSUPPORT = SOCEPROTONOSUPPORT;
-      EsockEWOULDBLOCK = SOCEWOULDBLOCK;
-
 
 
 Type
 Type
   cushort=word;
   cushort=word;
@@ -124,9 +108,6 @@ Type
 // OS/2 stack based on BSD stack
 // OS/2 stack based on BSD stack
 {$DEFINE BSD}
 {$DEFINE BSD}
 {$I socketsh.inc}
 {$I socketsh.inc}
-  INVALID_SOCKET = TSocket(not(0));
-  SOCKET_ERROR = -1;
-
 
 
 Implementation
 Implementation
 
 
@@ -138,14 +119,13 @@ Implementation
                           Basic Socket Functions
                           Basic Socket Functions
 ******************************************************************************}
 ******************************************************************************}
 
 
-function SocketError: cint;
-begin
-  SocketError := so32dll.Sock_ErrNo;
-end;
-
 Function socket(Domain,SocketType,Protocol:Longint):Longint;
 Function socket(Domain,SocketType,Protocol:Longint):Longint;
 begin
 begin
   Socket:=so32dll.Socket(Domain,SocketType,ProtoCol);
   Socket:=so32dll.Socket(Domain,SocketType,ProtoCol);
+  if Socket<0 then
+    SocketError:=so32dll.sock_errno
+  else
+    SocketError:=0;
 end;
 end;
 
 
 Function Send(Sock:Longint;Const Buf;BufLen,Flags:Longint):Longint;
 Function Send(Sock:Longint;Const Buf;BufLen,Flags:Longint):Longint;
@@ -161,11 +141,19 @@ end;
 Function Recv(Sock:Longint;Var Buf;BufLen,Flags:Longint):Longint;
 Function Recv(Sock:Longint;Var Buf;BufLen,Flags:Longint):Longint;
 begin
 begin
   Recv:=so32dll.Recv(Sock,Buf,BufLen,Flags);
   Recv:=so32dll.Recv(Sock,Buf,BufLen,Flags);
+  if Recv<0 then
+    SocketError:=so32dll.sock_errno
+  else
+    SocketError:=0;
 end;
 end;
 
 
 Function RecvFrom(Sock : Longint; Var Buf; Buflen,Flags : Longint; Var Addr; var AddrLen : longInt) : longint;
 Function RecvFrom(Sock : Longint; Var Buf; Buflen,Flags : Longint; Var Addr; var AddrLen : longInt) : longint;
 begin
 begin
   RecvFrom:=so32dll.RecvFrom(Sock,Buf,BufLen,Flags,so32dll.SockAddr(Addr),AddrLen);
   RecvFrom:=so32dll.RecvFrom(Sock,Buf,BufLen,Flags,so32dll.SockAddr(Addr),AddrLen);
+  if RecvFrom<0 then
+    SocketError:=so32dll.sock_errno
+  else
+    SocketError:=0;
 end;
 end;
 
 
 Function Bind(Sock:Longint;Const Addr;AddrLen:Longint):Boolean;
 Function Bind(Sock:Longint;Const Addr;AddrLen:Longint):Boolean;
@@ -174,13 +162,28 @@ begin
 end;
 end;
 
 
 Function Listen(Sock,MaxConnect:Longint):Boolean;
 Function Listen(Sock,MaxConnect:Longint):Boolean;
+var
+  l : longint;
 begin
 begin
-  Listen := so32dll.Listen(Sock,MaxConnect) = 0;
+  l:=so32dll.Listen(Sock,MaxConnect);
+  if l<0 then
+  begin
+    SocketError:=so32dll.sock_errno;
+    Listen:=false;
+  end else
+  begin
+    SocketError:=0;
+    Listen:=true;
+  end;
 end;
 end;
 
 
 Function Accept(Sock:Longint;Var Addr;Var Addrlen:Longint):Longint;
 Function Accept(Sock:Longint;Var Addr;Var Addrlen:Longint):Longint;
 begin
 begin
   Accept:=so32dll.Accept(Sock,so32dll.SockAddr(Addr), AddrLen);
   Accept:=so32dll.Accept(Sock,so32dll.SockAddr(Addr), AddrLen);
+  if Accept<0 then
+    SocketError:=so32dll.sock_errno
+  else
+    SocketError:=0;
 end;
 end;
 
 
 Function Connect(Sock:Longint;const Addr; Addrlen:Longint):Boolean;
 Function Connect(Sock:Longint;const Addr; Addrlen:Longint):Boolean;
@@ -191,16 +194,28 @@ end;
 Function Shutdown(Sock:Longint;How:Longint):Longint;
 Function Shutdown(Sock:Longint;How:Longint):Longint;
 begin
 begin
   ShutDown:=so32dll.ShutDown(Sock,How);
   ShutDown:=so32dll.ShutDown(Sock,How);
+  if ShutDown<0 then
+    SocketError:=so32dll.sock_errno
+  else
+    SocketError:=0;
 end;
 end;
 
 
 Function GetSocketName(Sock:Longint;Var Addr;Var Addrlen:Longint):Longint;
 Function GetSocketName(Sock:Longint;Var Addr;Var Addrlen:Longint):Longint;
 begin
 begin
   GetSocketName:=so32dll.GetSockName(Sock, so32dll.SockAddr(Addr),AddrLen);
   GetSocketName:=so32dll.GetSockName(Sock, so32dll.SockAddr(Addr),AddrLen);
+  if GetSocketName<0 then
+    SocketError:=so32dll.sock_errno
+  else
+    SocketError:=0;
 end;
 end;
 
 
 Function GetPeerName(Sock:Longint;Var Addr;Var Addrlen:Longint):Longint;
 Function GetPeerName(Sock:Longint;Var Addr;Var Addrlen:Longint):Longint;
 begin
 begin
   GetPeerName:=so32dll.GetPeerName(Sock,so32dll.SockAddr(Addr),AddrLen);
   GetPeerName:=so32dll.GetPeerName(Sock,so32dll.SockAddr(Addr),AddrLen);
+  if GetPeerName<0 then
+    SocketError:=so32dll.sock_errno
+  else
+    SocketError:=0;
 end;
 end;
 
 
 Function SetSocketOptions(Sock,Level,OptName:Longint;Const OptVal;optlen:longint):Longint;
 Function SetSocketOptions(Sock,Level,OptName:Longint;Const OptVal;optlen:longint):Longint;
@@ -211,6 +226,10 @@ end;
 Function GetSocketOptions(Sock,Level,OptName:Longint;Var OptVal;Var optlen:longint):Longint;
 Function GetSocketOptions(Sock,Level,OptName:Longint;Var OptVal;Var optlen:longint):Longint;
 begin
 begin
   GetSocketOptions:=so32dll.GetSockOpt(Sock,Level,OptName,OptVal,OptLen);
   GetSocketOptions:=so32dll.GetSockOpt(Sock,Level,OptName,OptVal,OptLen);
+  if GetSocketOptions<0 then
+    SocketError:=so32dll.sock_errno
+  else
+    SocketError:=0;
 end;
 end;
 
 
 Function SocketPair(Domain,SocketType,Protocol:Longint;var Pair:TSockArray):Longint;
 Function SocketPair(Domain,SocketType,Protocol:Longint;var Pair:TSockArray):Longint;
@@ -222,29 +241,39 @@ begin
 end;
 end;
 
 
 { mimic the linux fdWrite/fdRead calls for the file/text socket wrapper }
 { mimic the linux fdWrite/fdRead calls for the file/text socket wrapper }
-function fpWrite(handle : longint;Const bufptr;size : dword) : dword;
+function fdWrite(handle : longint;Const bufptr;size : dword) : dword;
 begin
 begin
-  fpWrite := dword(fpsend(handle, @bufptr, size, 0));
-  if fpWrite = dword(-1) then
-    fpWrite := 0;
+  fdWrite := dword(fpsend(handle, @bufptr, size, 0));
+  if fdWrite = dword(-1) then
+  begin
+    SocketError := so32dll.sock_errno;
+    fdWrite := 0;
+  end
+  else
+    SocketError := 0;
 end;
 end;
 
 
-function fpRead(handle : longint;var bufptr;size : dword) : dword;
+function fdRead(handle : longint;var bufptr;size : dword) : dword;
 var
 var
   d : dword;
   d : dword;
 begin
 begin
   d:=dword(so32dll.os2_ioctl(handle,FIONREAD,d,SizeOf(d)));
   d:=dword(so32dll.os2_ioctl(handle,FIONREAD,d,SizeOf(d)));
   if d=dword(-1) then
   if d=dword(-1) then
   begin
   begin
-    fpRead:=0;
+    SocketError:=so32dll.sock_errno;
+    fdRead:=0;
   end else
   end else
   begin
   begin
     if size>d then
     if size>d then
       size:=d;
       size:=d;
-    fpRead := dword(so32dll.recv(handle, bufptr, size, 0));
-    if fpRead = dword(-1) then
-     fpRead := 0;
-   end;
+    fdRead := dword(so32dll.recv(handle, bufptr, size, 0));
+    if fdRead = dword(-1) then
+    begin
+      SocketError:= so32dll.sock_errno;
+      fdRead := 0;
+    end else
+      SocketError:=0;
+  end;
 end;
 end;
 
 
 {$i sockets.inc}
 {$i sockets.inc}
@@ -252,72 +281,128 @@ end;
 function fpsocket       (domain:cint; xtype:cint; protocol: cint):cint;
 function fpsocket       (domain:cint; xtype:cint; protocol: cint):cint;
 begin
 begin
   fpSocket:=so32dll.Socket(Domain,xtype,ProtoCol);
   fpSocket:=so32dll.Socket(Domain,xtype,ProtoCol);
+  if fpSocket<0 then
+    SocketError:=so32dll.sock_errno
+  else
+    SocketError:=0;
 end;
 end;
 
 
 function fpsend (s:cint; msg:pointer; len:size_t; flags:cint):ssize_t;
 function fpsend (s:cint; msg:pointer; len:size_t; flags:cint):ssize_t;
 begin
 begin
   fpSend:=so32dll.Send(S,msg^,len,flags);
   fpSend:=so32dll.Send(S,msg^,len,flags);
+  if fpSend<0 then
+    SocketError:=so32dll.sock_errno
+  else
+    SocketError:=0;
 end;
 end;
 
 
 function fpsendto (s:cint; msg:pointer; len:size_t; flags:cint; tox :psockaddr; tolen: tsocklen):ssize_t;
 function fpsendto (s:cint; msg:pointer; len:size_t; flags:cint; tox :psockaddr; tolen: tsocklen):ssize_t;
 begin
 begin
   // Dubious construct, this should be checked. (IPV6 fails ?)
   // Dubious construct, this should be checked. (IPV6 fails ?)
   fpSendTo:=so32dll.SendTo(S,msg^,Len,Flags,so32dll.SockAddr(tox^),toLen);
   fpSendTo:=so32dll.SendTo(S,msg^,Len,Flags,so32dll.SockAddr(tox^),toLen);
+  if fpSendTo<0 then
+    SocketError:=so32dll.sock_errno
+  else
+    SocketError:=0;
 end;
 end;
 
 
 function fprecv         (s:cint; buf: pointer; len: size_t; flags: cint):ssize_t;
 function fprecv         (s:cint; buf: pointer; len: size_t; flags: cint):ssize_t;
 begin
 begin
   fpRecv:=so32dll.Recv(S,Buf,Len,Flags);
   fpRecv:=so32dll.Recv(S,Buf,Len,Flags);
+  if fpRecv<0 then
+    SocketError:=so32dll.sock_errno
+  else
+    SocketError:=0;
 end;
 end;
 
 
 function fprecvfrom    (s:cint; buf: pointer; len: size_t; flags: cint; from : psockaddr; fromlen : psocklen):ssize_t;
 function fprecvfrom    (s:cint; buf: pointer; len: size_t; flags: cint; from : psockaddr; fromlen : psocklen):ssize_t;
 begin
 begin
   fpRecvFrom:=so32dll.RecvFrom(S,Buf,Len,Flags,so32dll.SockAddr(from^),FromLen^);
   fpRecvFrom:=so32dll.RecvFrom(S,Buf,Len,Flags,so32dll.SockAddr(from^),FromLen^);
+  if fpRecvFrom<0 then
+    SocketError:=so32dll.sock_errno
+  else
+    SocketError:=0;
 end;
 end;
 
 
 function fpconnect     (s:cint; name  : psockaddr; namelen : tsocklen):cint;
 function fpconnect     (s:cint; name  : psockaddr; namelen : tsocklen):cint;
 begin
 begin
   fpConnect:=so32dll.Connect(S,so32dll.SockAddr(name^),nameLen);
   fpConnect:=so32dll.Connect(S,so32dll.SockAddr(name^),nameLen);
+  if fpConnect<0 then
+    SocketError:=so32dll.sock_errno
+  else
+    SocketError:=0;
 end;
 end;
 
 
 function fpshutdown     (s:cint; how:cint):cint;
 function fpshutdown     (s:cint; how:cint):cint;
 begin
 begin
   fpShutDown:=so32dll.ShutDown(S,How);
   fpShutDown:=so32dll.ShutDown(S,How);
+  if fpShutDown<0 then
+    SocketError:=so32dll.sock_errno
+  else
+    SocketError:=0;
 end;
 end;
 
 
 function fpbind (s:cint; addrx : psockaddr; addrlen : tsocklen):cint;
 function fpbind (s:cint; addrx : psockaddr; addrlen : tsocklen):cint;
 begin
 begin
   fpbind:=so32dll.Bind(S,so32dll.SockAddr(Addrx^),AddrLen);
   fpbind:=so32dll.Bind(S,so32dll.SockAddr(Addrx^),AddrLen);
+  if fpbind<0 then
+       SocketError:=so32dll.sock_errno
+  else
+       SocketError:=0;
 end;
 end;
 
 
 function fplisten      (s:cint; backlog : cint):cint;
 function fplisten      (s:cint; backlog : cint):cint;
 begin
 begin
   fplisten:=so32dll.Listen(S,backlog);
   fplisten:=so32dll.Listen(S,backlog);
+  if fplisten<0 then
+       SocketError:=so32dll.sock_errno
+  else
+       SocketError:=0;
 end;
 end;
 
 
 function fpaccept      (s:cint; addrx : psockaddr; addrlen : psocklen):cint;
 function fpaccept      (s:cint; addrx : psockaddr; addrlen : psocklen):cint;
 begin
 begin
   fpAccept:=so32dll.Accept(S,so32dll.SockAddr(Addrx^),longint(@AddrLen));
   fpAccept:=so32dll.Accept(S,so32dll.SockAddr(Addrx^),longint(@AddrLen));
+  if fpAccept<0 then
+    SocketError:=so32dll.sock_errno
+  else
+    SocketError:=0;
 end;
 end;
 
 
 function fpgetsockname (s:cint; name  : psockaddr; namelen : psocklen):cint;
 function fpgetsockname (s:cint; name  : psockaddr; namelen : psocklen):cint;
 begin
 begin
   fpGetSockName:=so32dll.GetSockName(S,so32dll.SockAddr(name^),nameLen^);
   fpGetSockName:=so32dll.GetSockName(S,so32dll.SockAddr(name^),nameLen^);
+  if fpGetSockName<0 then
+    SocketError:=so32dll.sock_errno
+  else
+    SocketError:=0;
 end;
 end;
 
 
 function fpgetpeername (s:cint; name  : psockaddr; namelen : psocklen):cint;
 function fpgetpeername (s:cint; name  : psockaddr; namelen : psocklen):cint;
 begin
 begin
   fpGetPeerName:=so32dll.GetPeerName(S,so32dll.SockAddr(name^),NameLen^);
   fpGetPeerName:=so32dll.GetPeerName(S,so32dll.SockAddr(name^),NameLen^);
+  if fpGetPeerName<0 then
+    SocketError:=so32dll.sock_errno
+  else
+    SocketError:=0;
 end;
 end;
 
 
 function fpgetsockopt  (s:cint; level:cint; optname:cint; optval:pointer; optlen : psocklen):cint;
 function fpgetsockopt  (s:cint; level:cint; optname:cint; optval:pointer; optlen : psocklen):cint;
 begin
 begin
   fpGetSockOpt:=so32dll.GetSockOpt(S,Level,OptName,OptVal,OptLen^);
   fpGetSockOpt:=so32dll.GetSockOpt(S,Level,OptName,OptVal,OptLen^);
+  if fpGetSockOpt<0 then
+    SocketError:=so32dll.sock_errno
+  else
+    SocketError:=0;
 end;
 end;
 
 
 function fpsetsockopt  (s:cint; level:cint; optname:cint; optval:pointer; optlen :tsocklen):cint;
 function fpsetsockopt  (s:cint; level:cint; optname:cint; optval:pointer; optlen :tsocklen):cint;
 begin
 begin
   fpSetSockOpt:=so32dll.SetSockOpt(S,Level,OptName,OptVal,OptLen);
   fpSetSockOpt:=so32dll.SetSockOpt(S,Level,OptName,OptVal,OptLen);
+  if fpSetSockOpt<0 then
+    SocketError:=so32dll.sock_errno
+  else
+    SocketError:=0;
 end;
 end;
 
 
 function fpsocketpair  (d:cint; xtype:cint; protocol:cint; sv:pcint):cint;
 function fpsocketpair  (d:cint; xtype:cint; protocol:cint; sv:pcint):cint;
@@ -328,6 +413,14 @@ end;
 Function CloseSocket(Sock:Longint):Longint;
 Function CloseSocket(Sock:Longint):Longint;
 begin
 begin
   CloseSocket:=so32dll.soclose (Sock);
   CloseSocket:=so32dll.soclose (Sock);
+  if CloseSocket<>0 then
+  begin
+    SocketError:=so32dll.sock_errno;
+  end else
+  begin
+    CloseSocket := 0;
+    SocketError := 0;
+  end;
 end;
 end;
 
 
 
 

+ 3 - 3
rtl/unix/genfunch.inc

@@ -14,8 +14,8 @@
 
 
  **********************************************************************}
  **********************************************************************}
 
 
-function CreateShellArgV(const prog:string):ppchar; deprecated;
+function CreateShellArgV(const prog:string):ppchar;
 
 
-function CreateShellArgV(const prog:Ansistring):ppchar; deprecated;
+function CreateShellArgV(const prog:Ansistring):ppchar;
 
 
-procedure FreeShellArgV(p:ppchar); deprecated;
+procedure FreeShellArgV(p:ppchar);

+ 9 - 30
rtl/unix/sockets.pp

@@ -14,7 +14,7 @@ unit Sockets;
 Interface
 Interface
 
 
 {$ifdef Unix}
 {$ifdef Unix}
-Uses baseunix,UnixType;
+Uses UnixType;
 {$endif}
 {$endif}
 
 
 {$ifdef FreeBSD}
 {$ifdef FreeBSD}
@@ -37,28 +37,14 @@ type
                   path:array[0..107] of char;    //104 total for freebsd.
                   path:array[0..107] of char;    //104 total for freebsd.
                   end;
                   end;
 
 
-const
-  EsockEINTR            = EsysEINTR;   
-  EsockEBADF            = EsysEBADF;
-  EsockEFAULT           = EsysEFAULT;
-  EsockEINVAL           = EsysEINVAL;
-  EsockEACCESS          = ESysEAcces;
-  EsockEMFILE           = ESysEmfile;
-  EsockEMSGSIZE         = ESysEMsgSize;
-  EsockENOBUFS          = ESysENoBufs;
-  EsockENOTCONN         = ESysENotConn;
-  EsockENOTSOCK         = ESysENotSock;
-  EsockEPROTONOSUPPORT  = ESysEProtoNoSupport;
-  EsockEWOULDBLOCK      = ESysEWouldBlock;
-
 
 
 { unix socket specific functions }
 { unix socket specific functions }
-Procedure Str2UnixSockAddr(const addr:string;var t:TUnixSockAddr;var len:longint); deprecated;
-Function Bind(Sock:longint;const addr:string):boolean; deprecated;
-Function Connect(Sock:longint;const addr:string;var SockIn,SockOut:text):Boolean; deprecated;
-Function Connect(Sock:longint;const addr:string;var SockIn,SockOut:file):Boolean; deprecated;
-Function Accept(Sock:longint;var addr:string;var SockIn,SockOut:text):Boolean;    deprecated;
-Function Accept(Sock:longint;var addr:string;var SockIn,SockOut:File):Boolean;    deprecated;
+Procedure Str2UnixSockAddr(const addr:string;var t:TUnixSockAddr;var len:longint);
+Function Bind(Sock:longint;const addr:string):boolean;
+Function Connect(Sock:longint;const addr:string;var SockIn,SockOut:text):Boolean;
+Function Connect(Sock:longint;const addr:string;var SockIn,SockOut:file):Boolean;
+Function Accept(Sock:longint;var addr:string;var SockIn,SockOut:text):Boolean;
+Function Accept(Sock:longint;var addr:string;var SockIn,SockOut:File):Boolean;
 
 
 //function  fpaccept      (s:cint; addrx : psockaddr; addrlen : psocklen):cint; maybelibc
 //function  fpaccept      (s:cint; addrx : psockaddr; addrlen : psocklen):cint; maybelibc
 //function  fpbind      (s:cint; addrx : psockaddr; addrlen : tsocklen):cint;  maybelibc
 //function  fpbind      (s:cint; addrx : psockaddr; addrlen : tsocklen):cint;  maybelibc
@@ -66,9 +52,7 @@ Function Accept(Sock:longint;var addr:string;var SockIn,SockOut:File):Boolean;
 
 
 Implementation
 Implementation
 
 
-Uses {$ifndef FPC_USE_LIBC}SysCall{$else}initc{$endif};
-
-threadvar internal_socketerror : cint;
+Uses BaseUnix,{$ifndef FPC_USE_LIBC}SysCall{$else}initc{$endif};
 
 
 { Include filerec and textrec structures }
 { Include filerec and textrec structures }
 {$i filerec.inc}
 {$i filerec.inc}
@@ -77,12 +61,6 @@ threadvar internal_socketerror : cint;
                           Kernel Socket Callings
                           Kernel Socket Callings
 ******************************************************************************}
 ******************************************************************************}
 
 
-function socketerror:cint;
-
-begin
-  socketerror:=internal_socketerror;
-end;
-
 {$ifndef FPC_USE_LIBC}
 {$ifndef FPC_USE_LIBC}
 {$i unixsock.inc}
 {$i unixsock.inc}
 {$else}
 {$else}
@@ -90,4 +68,5 @@ end;
 {$endif}
 {$endif}
 {$i sockovl.inc}
 {$i sockovl.inc}
 {$i sockets.inc}
 {$i sockets.inc}
+
 end.
 end.

+ 7 - 7
rtl/unix/unix.pp

@@ -88,12 +88,11 @@ function FpExecV(Const PathName:AnsiString;args:ppchar):cint;
 function FpExecVP(Const PathName:AnsiString;args:ppchar):cint;
 function FpExecVP(Const PathName:AnsiString;args:ppchar):cint;
 function FpExecVPE(Const PathName:AnsiString;args,env:ppchar):cint;
 function FpExecVPE(Const PathName:AnsiString;args,env:ppchar):cint;
 
 
-Function Shell   (const Command:String):cint;     deprecated;
-Function Shell   (const Command:AnsiString):cint; deprecated;
+Function Shell   (const Command:String):cint;
+Function Shell   (const Command:AnsiString):cint;
 Function fpSystem(const Command:AnsiString):cint;
 Function fpSystem(const Command:AnsiString):cint;
 
 
-Function WaitProcess (Pid:cint):cint; 
-{ like WaitPid(PID,@result,0) Handling of Signal interrupts (errno=EINTR), returning the Exitcode of Process (>=0) or -Status if terminated}
+Function WaitProcess (Pid:cint):cint; { like WaitPid(PID,@result,0) Handling of Signal interrupts (errno=EINTR), returning the Exitcode of Process (>=0) or -Status if terminated}
 
 
 Function WIFSTOPPED (Status: Integer): Boolean;
 Function WIFSTOPPED (Status: Integer): Boolean;
 Function W_EXITCODE (ReturnCode, Signal: Integer): Integer;
 Function W_EXITCODE (ReturnCode, Signal: Integer): Integer;
@@ -113,8 +112,9 @@ Function  StatFS  (Path:pchar;Var Info:tstatfs):cint;
 Function  fpFlock   (var T : text;mode : cint) : cint;
 Function  fpFlock   (var T : text;mode : cint) : cint;
 Function  fpFlock   (var F : File;mode : cint) : cint;
 Function  fpFlock   (var F : File;mode : cint) : cint;
 
 
-Function  SelectText (var T:Text;TimeOut :PTimeVal):cint; deprecated;
-Function  SelectText (var T:Text;TimeOut :cint):cint; deprecated;
+
+Function  SelectText (var T:Text;TimeOut :PTimeVal):cint;
+Function  SelectText (var T:Text;TimeOut :cint):cint;
 
 
 {**************************
 {**************************
    Directory Handling
    Directory Handling
@@ -387,7 +387,7 @@ End;
 {$if defined(FPC_USE_FPEXEC) and not defined(USE_VFORK)}
 {$if defined(FPC_USE_FPEXEC) and not defined(USE_VFORK)}
 {$define SHELL_USE_FPEXEC}
 {$define SHELL_USE_FPEXEC}
 {$endif}
 {$endif}
-Function Shell(const Command:String):cint; deprecated;
+Function Shell(const Command:String):cint;
 {
 {
   Executes the shell, and passes it the string Command. (Through /bin/sh -c)
   Executes the shell, and passes it the string Command. (Through /bin/sh -c)
   The current environment is passed to the shell.
   The current environment is passed to the shell.

+ 0 - 113
tests/tbs/tb0524.pp

@@ -1,113 +0,0 @@
-program tb0523;
-
-uses sockets,baseunix;
-
-const port=6667;
-
- function rawport_to_netport(const raw_port:word):word;
- begin
-  rawport_to_netport := swap(raw_port);
- end;
-
-procedure do_server;
-
-var s,t:string;
-    lsock,usock:longint;
-    saddr:Tinetsockaddr;
-    len:longInt;
-    sin,sout:text;
-    raw_port:word;
-    i:byte;
-
-begin
-   lsock:=socket(af_inet,sock_stream,0);
-   if lsock=-1 then
-     begin
-       writeln(socketerror);
-       halt(1);
-     end;
-
-  with saddr do
-    begin
-      family:=af_inet;
-      port:=ntobe(word(6667));
-      addr:=0;
-   end;
-
-  if not bind(lsock,saddr,sizeof(saddr)) then
-    begin
-      writeln(socketerror);
-      halt(1);
-    end;
-
-  if not listen(lsock,1) then
-    begin
-      writeln(socketerror);
-      halt(1);
-    end;
-
-  len:=sizeof(saddr);
-  usock:=accept(lsock,saddr,len);
-  if usock=-1 then
-    begin
-      writeln(SocketError);
-      halt(1);
-    end;
-  sock2text(usock,sin,sout);
-
-  reset(sin);
-  rewrite(sout);
-  repeat
-    readln(sin,s);
-    t:='';
-    for i:=length(s) downto 1 do
-      t:=t+s[i];
-    writeln(sout,t);
-  until eof(sin);
-  close(sin);
-  close(sout);
-  shutdown(usock,2);
-end;
-
-procedure do_client;
-
-var s:sizeint;
-    saddr:Tinetsockaddr;
-    sin,sout:text;
-    str:ansistring;
-
-begin
-   s:=socket(af_inet,sock_stream,0);
-   saddr.sin_family:=af_inet;
-   saddr.sin_port:=htons(port);
-   saddr.sin_addr.s_addr:=hosttonet($7f000001); {127.0.0.1}
-   if connect(s,saddr,sin,sout)=false then
-     begin
-       writeln(socketerror);
-       halt(1);
-     end;
-   writeln(sout,'abcd');
-   readln(sin,str);
-   if str<>'dcba' then
-     halt(1);
-   writeln(sout,'1234');
-   readln(sin,str);
-   if str<>'4321' then
-     halt(1);
-   close(sin);
-   close(sout);
-   shutdown(s,2);
-end;
-
-var i:longint;
-
-begin
-  if fpfork=0 then
-    do_server
-  else
-    begin
-      {Give server some time to start.}
-      for i:=1 to 1000000 do;
-      do_client;
-    end;
-end.