mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-12 10:09:36 +02:00
* OS/2 implementation synchronized with SocketError change
git-svn-id: trunk@7330 -
This commit is contained in:
parent
f83568d897
commit
f55a720b25
@ -138,13 +138,14 @@ Implementation
|
||||
Basic Socket Functions
|
||||
******************************************************************************}
|
||||
|
||||
function SocketError: cint;
|
||||
begin
|
||||
SocketError := so32dll.Sock_ErrNo;
|
||||
end;
|
||||
|
||||
Function socket(Domain,SocketType,Protocol:Longint):Longint;
|
||||
begin
|
||||
Socket:=so32dll.Socket(Domain,SocketType,ProtoCol);
|
||||
if Socket<0 then
|
||||
SocketError:=so32dll.sock_errno
|
||||
else
|
||||
SocketError:=0;
|
||||
end;
|
||||
|
||||
Function Send(Sock:Longint;Const Buf;BufLen,Flags:Longint):Longint;
|
||||
@ -160,19 +161,11 @@ end;
|
||||
Function Recv(Sock:Longint;Var Buf;BufLen,Flags:Longint):Longint;
|
||||
begin
|
||||
Recv:=so32dll.Recv(Sock,Buf,BufLen,Flags);
|
||||
if Recv<0 then
|
||||
SocketError:=so32dll.sock_errno
|
||||
else
|
||||
SocketError:=0;
|
||||
end;
|
||||
|
||||
Function RecvFrom(Sock : Longint; Var Buf; Buflen,Flags : Longint; Var Addr; var AddrLen : longInt) : longint;
|
||||
begin
|
||||
RecvFrom:=so32dll.RecvFrom(Sock,Buf,BufLen,Flags,so32dll.SockAddr(Addr),AddrLen);
|
||||
if RecvFrom<0 then
|
||||
SocketError:=so32dll.sock_errno
|
||||
else
|
||||
SocketError:=0;
|
||||
end;
|
||||
|
||||
Function Bind(Sock:Longint;Const Addr;AddrLen:Longint):Boolean;
|
||||
@ -181,28 +174,13 @@ begin
|
||||
end;
|
||||
|
||||
Function Listen(Sock,MaxConnect:Longint):Boolean;
|
||||
var
|
||||
l : longint;
|
||||
begin
|
||||
l:=so32dll.Listen(Sock,MaxConnect);
|
||||
if l<0 then
|
||||
begin
|
||||
SocketError:=so32dll.sock_errno;
|
||||
Listen:=false;
|
||||
end else
|
||||
begin
|
||||
SocketError:=0;
|
||||
Listen:=true;
|
||||
end;
|
||||
Listen := so32dll.Listen(Sock,MaxConnect) = 0;
|
||||
end;
|
||||
|
||||
Function Accept(Sock:Longint;Var Addr;Var Addrlen:Longint):Longint;
|
||||
begin
|
||||
Accept:=so32dll.Accept(Sock,so32dll.SockAddr(Addr), AddrLen);
|
||||
if Accept<0 then
|
||||
SocketError:=so32dll.sock_errno
|
||||
else
|
||||
SocketError:=0;
|
||||
end;
|
||||
|
||||
Function Connect(Sock:Longint;const Addr; Addrlen:Longint):Boolean;
|
||||
@ -212,29 +190,17 @@ end;
|
||||
|
||||
Function Shutdown(Sock:Longint;How:Longint):Longint;
|
||||
begin
|
||||
ShutDown:=so32dll.ShutDown(Sock,How);
|
||||
if ShutDown<0 then
|
||||
SocketError:=so32dll.sock_errno
|
||||
else
|
||||
SocketError:=0;
|
||||
ShutDown:=so32dll.ShutDown(Sock,How) = 0;
|
||||
end;
|
||||
|
||||
Function GetSocketName(Sock:Longint;Var Addr;Var Addrlen:Longint):Longint;
|
||||
begin
|
||||
GetSocketName:=so32dll.GetSockName(Sock, so32dll.SockAddr(Addr),AddrLen);
|
||||
if GetSocketName<0 then
|
||||
SocketError:=so32dll.sock_errno
|
||||
else
|
||||
SocketError:=0;
|
||||
GetSocketName:=so32dll.GetSockName(Sock, so32dll.SockAddr(Addr),AddrLen) = 0;
|
||||
end;
|
||||
|
||||
Function GetPeerName(Sock:Longint;Var Addr;Var Addrlen:Longint):Longint;
|
||||
begin
|
||||
GetPeerName:=so32dll.GetPeerName(Sock,so32dll.SockAddr(Addr),AddrLen);
|
||||
if GetPeerName<0 then
|
||||
SocketError:=so32dll.sock_errno
|
||||
else
|
||||
SocketError:=0;
|
||||
GetPeerName:=so32dll.GetPeerName(Sock,so32dll.SockAddr(Addr),AddrLen) = 0;
|
||||
end;
|
||||
|
||||
Function SetSocketOptions(Sock,Level,OptName:Longint;Const OptVal;optlen:longint):Longint;
|
||||
@ -244,11 +210,7 @@ end;
|
||||
|
||||
Function GetSocketOptions(Sock,Level,OptName:Longint;Var OptVal;Var optlen:longint):Longint;
|
||||
begin
|
||||
GetSocketOptions:=so32dll.GetSockOpt(Sock,Level,OptName,OptVal,OptLen);
|
||||
if GetSocketOptions<0 then
|
||||
SocketError:=so32dll.sock_errno
|
||||
else
|
||||
SocketError:=0;
|
||||
GetSocketOptions:=so32dll.GetSockOpt(Sock,Level,OptName,OptVal,OptLen) = 0;
|
||||
end;
|
||||
|
||||
Function SocketPair(Domain,SocketType,Protocol:Longint;var Pair:TSockArray):Longint;
|
||||
@ -264,12 +226,7 @@ function fpWrite(handle : longint;Const bufptr;size : dword) : dword;
|
||||
begin
|
||||
fpWrite := dword(fpsend(handle, @bufptr, size, 0));
|
||||
if fpWrite = dword(-1) then
|
||||
begin
|
||||
SocketError := so32dll.sock_errno;
|
||||
fpWrite := 0;
|
||||
end
|
||||
else
|
||||
SocketError := 0;
|
||||
end;
|
||||
|
||||
function fpRead(handle : longint;var bufptr;size : dword) : dword;
|
||||
@ -278,21 +235,15 @@ var
|
||||
begin
|
||||
d:=dword(so32dll.os2_ioctl(handle,FIONREAD,d,SizeOf(d)));
|
||||
if d=dword(-1) then
|
||||
begin
|
||||
SocketError:=so32dll.sock_errno;
|
||||
fpRead:=0;
|
||||
end else
|
||||
begin
|
||||
fpRead:=0
|
||||
else
|
||||
begin
|
||||
if size>d then
|
||||
size:=d;
|
||||
fpRead := dword(so32dll.recv(handle, bufptr, size, 0));
|
||||
if fpRead = dword(-1) then
|
||||
begin
|
||||
SocketError:= so32dll.sock_errno;
|
||||
fpRead := 0;
|
||||
end else
|
||||
SocketError:=0;
|
||||
end;
|
||||
fpRead := 0
|
||||
end;
|
||||
end;
|
||||
|
||||
{$i sockets.inc}
|
||||
@ -300,128 +251,72 @@ end;
|
||||
function fpsocket (domain:cint; xtype:cint; protocol: cint):cint;
|
||||
begin
|
||||
fpSocket:=so32dll.Socket(Domain,xtype,ProtoCol);
|
||||
if fpSocket<0 then
|
||||
SocketError:=so32dll.sock_errno
|
||||
else
|
||||
SocketError:=0;
|
||||
end;
|
||||
|
||||
function fpsend (s:cint; msg:pointer; len:size_t; flags:cint):ssize_t;
|
||||
begin
|
||||
fpSend:=so32dll.Send(S,msg^,len,flags);
|
||||
if fpSend<0 then
|
||||
SocketError:=so32dll.sock_errno
|
||||
else
|
||||
SocketError:=0;
|
||||
end;
|
||||
|
||||
function fpsendto (s:cint; msg:pointer; len:size_t; flags:cint; tox :psockaddr; tolen: tsocklen):ssize_t;
|
||||
begin
|
||||
// Dubious construct, this should be checked. (IPV6 fails ?)
|
||||
fpSendTo:=so32dll.SendTo(S,msg^,Len,Flags,so32dll.SockAddr(tox^),toLen);
|
||||
if fpSendTo<0 then
|
||||
SocketError:=so32dll.sock_errno
|
||||
else
|
||||
SocketError:=0;
|
||||
end;
|
||||
|
||||
function fprecv (s:cint; buf: pointer; len: size_t; flags: cint):ssize_t;
|
||||
begin
|
||||
fpRecv:=so32dll.Recv(S,Buf,Len,Flags);
|
||||
if fpRecv<0 then
|
||||
SocketError:=so32dll.sock_errno
|
||||
else
|
||||
SocketError:=0;
|
||||
end;
|
||||
|
||||
function fprecvfrom (s:cint; buf: pointer; len: size_t; flags: cint; from : psockaddr; fromlen : psocklen):ssize_t;
|
||||
begin
|
||||
fpRecvFrom:=so32dll.RecvFrom(S,Buf,Len,Flags,so32dll.SockAddr(from^),FromLen^);
|
||||
if fpRecvFrom<0 then
|
||||
SocketError:=so32dll.sock_errno
|
||||
else
|
||||
SocketError:=0;
|
||||
end;
|
||||
|
||||
function fpconnect (s:cint; name : psockaddr; namelen : tsocklen):cint;
|
||||
begin
|
||||
fpConnect:=so32dll.Connect(S,so32dll.SockAddr(name^),nameLen);
|
||||
if fpConnect<0 then
|
||||
SocketError:=so32dll.sock_errno
|
||||
else
|
||||
SocketError:=0;
|
||||
end;
|
||||
|
||||
function fpshutdown (s:cint; how:cint):cint;
|
||||
begin
|
||||
fpShutDown:=so32dll.ShutDown(S,How);
|
||||
if fpShutDown<0 then
|
||||
SocketError:=so32dll.sock_errno
|
||||
else
|
||||
SocketError:=0;
|
||||
end;
|
||||
|
||||
function fpbind (s:cint; addrx : psockaddr; addrlen : tsocklen):cint;
|
||||
begin
|
||||
fpbind:=so32dll.Bind(S,so32dll.SockAddr(Addrx^),AddrLen);
|
||||
if fpbind<0 then
|
||||
SocketError:=so32dll.sock_errno
|
||||
else
|
||||
SocketError:=0;
|
||||
end;
|
||||
|
||||
function fplisten (s:cint; backlog : cint):cint;
|
||||
begin
|
||||
fplisten:=so32dll.Listen(S,backlog);
|
||||
if fplisten<0 then
|
||||
SocketError:=so32dll.sock_errno
|
||||
else
|
||||
SocketError:=0;
|
||||
end;
|
||||
|
||||
function fpaccept (s:cint; addrx : psockaddr; addrlen : psocklen):cint;
|
||||
begin
|
||||
fpAccept:=so32dll.Accept(S,so32dll.SockAddr(Addrx^),longint(@AddrLen));
|
||||
if fpAccept<0 then
|
||||
SocketError:=so32dll.sock_errno
|
||||
else
|
||||
SocketError:=0;
|
||||
end;
|
||||
|
||||
function fpgetsockname (s:cint; name : psockaddr; namelen : psocklen):cint;
|
||||
begin
|
||||
fpGetSockName:=so32dll.GetSockName(S,so32dll.SockAddr(name^),nameLen^);
|
||||
if fpGetSockName<0 then
|
||||
SocketError:=so32dll.sock_errno
|
||||
else
|
||||
SocketError:=0;
|
||||
end;
|
||||
|
||||
function fpgetpeername (s:cint; name : psockaddr; namelen : psocklen):cint;
|
||||
begin
|
||||
fpGetPeerName:=so32dll.GetPeerName(S,so32dll.SockAddr(name^),NameLen^);
|
||||
if fpGetPeerName<0 then
|
||||
SocketError:=so32dll.sock_errno
|
||||
else
|
||||
SocketError:=0;
|
||||
end;
|
||||
|
||||
function fpgetsockopt (s:cint; level:cint; optname:cint; optval:pointer; optlen : psocklen):cint;
|
||||
begin
|
||||
fpGetSockOpt:=so32dll.GetSockOpt(S,Level,OptName,OptVal,OptLen^);
|
||||
if fpGetSockOpt<0 then
|
||||
SocketError:=so32dll.sock_errno
|
||||
else
|
||||
SocketError:=0;
|
||||
end;
|
||||
|
||||
function fpsetsockopt (s:cint; level:cint; optname:cint; optval:pointer; optlen :tsocklen):cint;
|
||||
begin
|
||||
fpSetSockOpt:=so32dll.SetSockOpt(S,Level,OptName,OptVal,OptLen);
|
||||
if fpSetSockOpt<0 then
|
||||
SocketError:=so32dll.sock_errno
|
||||
else
|
||||
SocketError:=0;
|
||||
end;
|
||||
|
||||
function fpsocketpair (d:cint; xtype:cint; protocol:cint; sv:pcint):cint;
|
||||
@ -432,14 +327,6 @@ end;
|
||||
Function CloseSocket(Sock:Longint):Longint;
|
||||
begin
|
||||
CloseSocket:=so32dll.soclose (Sock);
|
||||
if CloseSocket<>0 then
|
||||
begin
|
||||
SocketError:=so32dll.sock_errno;
|
||||
end else
|
||||
begin
|
||||
CloseSocket := 0;
|
||||
SocketError := 0;
|
||||
end;
|
||||
end;
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user