mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-15 07:39:31 +02:00
* remove text and file based socket conversions and operations from sockets
git-svn-id: trunk@5955 -
This commit is contained in:
parent
d375279a3e
commit
62e276d064
@ -11,165 +11,6 @@
|
||||
|
||||
**********************************************************************}
|
||||
|
||||
{******************************************************************************
|
||||
Text File Writeln/ReadLn Support
|
||||
******************************************************************************}
|
||||
|
||||
|
||||
Procedure OpenSock(var F:Text);
|
||||
begin
|
||||
if textrec(f).handle=UnusedHandle then
|
||||
textrec(f).mode:=fmclosed
|
||||
else
|
||||
case textrec(f).userdata[1] of
|
||||
S_OUT : textrec(f).mode:=fmoutput;
|
||||
S_IN : textrec(f).mode:=fminput;
|
||||
else
|
||||
textrec(f).mode:=fmclosed;
|
||||
end;
|
||||
end;
|
||||
|
||||
|
||||
|
||||
Procedure IOSock(var F:text);
|
||||
begin
|
||||
case textrec(f).mode of
|
||||
fmoutput : fpWrite(textrec(f).handle,textrec(f).bufptr^,textrec(f).bufpos);
|
||||
fminput : textrec(f).BufEnd:=fpRead(textrec(f).handle,textrec(f).bufptr^,textrec(f).bufsize);
|
||||
end;
|
||||
textrec(f).bufpos:=0;
|
||||
end;
|
||||
|
||||
|
||||
|
||||
Procedure FlushSock(var F:Text);
|
||||
begin
|
||||
if (textrec(f).mode=fmoutput) and (textrec(f).bufpos<>0) then
|
||||
begin
|
||||
IOSock(f);
|
||||
textrec(f).bufpos:=0;
|
||||
end;
|
||||
end;
|
||||
|
||||
|
||||
|
||||
Procedure CloseSock(var F:text);
|
||||
begin
|
||||
{ Nothing special has to be done here }
|
||||
end;
|
||||
|
||||
|
||||
|
||||
Procedure Sock2Text(Sock:Longint;Var SockIn,SockOut:Text);
|
||||
{
|
||||
Set up two Pascal Text file descriptors for reading and writing)
|
||||
}
|
||||
begin
|
||||
{ First the reading part.}
|
||||
Assign(SockIn,'.');
|
||||
Textrec(SockIn).Handle:=Sock;
|
||||
Textrec(Sockin).userdata[1]:=S_IN;
|
||||
TextRec(SockIn).OpenFunc:=@OpenSock;
|
||||
TextRec(SockIn).InOutFunc:=@IOSock;
|
||||
TextRec(SockIn).FlushFunc:=@FlushSock;
|
||||
TextRec(SockIn).CloseFunc:=@CloseSock;
|
||||
TextRec(SockIn).Mode := fmInput;
|
||||
{ Now the writing part. }
|
||||
Assign(SockOut,'.');
|
||||
Textrec(SockOut).Handle:=Sock;
|
||||
Textrec(SockOut).userdata[1]:=S_OUT;
|
||||
TextRec(SockOut).OpenFunc:=@OpenSock;
|
||||
TextRec(SockOut).InOutFunc:=@IOSock;
|
||||
TextRec(SockOut).FlushFunc:=@FlushSock;
|
||||
TextRec(SockOut).CloseFunc:=@CloseSock;
|
||||
TextRec(SockOut).Mode := fmOutput;
|
||||
end;
|
||||
|
||||
|
||||
{******************************************************************************
|
||||
Untyped File
|
||||
******************************************************************************}
|
||||
|
||||
Procedure Sock2File(Sock:Longint;Var SockIn,SockOut:File);
|
||||
begin
|
||||
{Input}
|
||||
Assign(SockIn,'.');
|
||||
FileRec(SockIn).Handle:=Sock;
|
||||
FileRec(SockIn).RecSize:=1;
|
||||
FileRec(Sockin).userdata[1]:=S_IN;
|
||||
FileRec(SockIn).Mode := fmInput;
|
||||
|
||||
{Output}
|
||||
Assign(SockOut,'.');
|
||||
FileRec(SockOut).Handle:=Sock;
|
||||
FileRec(SockOut).RecSize:=1;
|
||||
FileRec(SockOut).userdata[1]:=S_OUT;
|
||||
FileRec(SockOut).Mode := fmOutput;
|
||||
end;
|
||||
|
||||
{******************************************************************************
|
||||
InetSock
|
||||
******************************************************************************}
|
||||
|
||||
Function DoAccept(Sock:longint;Var addr:TInetSockAddr):longint;
|
||||
|
||||
Var AddrLen : Longint;
|
||||
|
||||
begin
|
||||
AddrLEn:=SizeOf(Addr);
|
||||
DoAccept:=Accept(Sock,Addr,AddrLen);
|
||||
end;
|
||||
|
||||
Function DoConnect(Sock:longint;const addr: TInetSockAddr): Boolean;
|
||||
|
||||
begin
|
||||
DoConnect:=Connect(Sock,Addr,SizeOF(TInetSockAddr));
|
||||
end;
|
||||
|
||||
Function Connect(Sock:longint;const addr: TInetSockAddr;var SockIn,SockOut:text):Boolean;
|
||||
|
||||
begin
|
||||
Connect:=DoConnect(Sock,addr);
|
||||
If Connect then
|
||||
Sock2Text(Sock,SockIn,SockOut);
|
||||
end;
|
||||
|
||||
Function Connect(Sock:longint;const addr:TInetSockAddr;var SockIn,SockOut:file):Boolean;
|
||||
|
||||
begin
|
||||
Connect:=DoConnect(Sock,addr);
|
||||
If Connect then
|
||||
Sock2File(Sock,SockIn,SockOut);
|
||||
end;
|
||||
|
||||
Function Accept(Sock:longint;var addr:TInetSockAddr;var SockIn,SockOut:text):Boolean;
|
||||
var
|
||||
s : longint;
|
||||
begin
|
||||
S:=DoAccept(Sock,addr);
|
||||
if S>0 then
|
||||
begin
|
||||
Sock2Text(S,SockIn,SockOut);
|
||||
Accept:=true;
|
||||
end
|
||||
else
|
||||
Accept:=false;
|
||||
end;
|
||||
|
||||
Function Accept(Sock:longint;var addr:TInetSockAddr;var SockIn,SockOut:File):Boolean;
|
||||
var
|
||||
s : longint;
|
||||
begin
|
||||
S:=DoAccept(Sock,addr);
|
||||
if S>0 then
|
||||
begin
|
||||
Sock2File(S,SockIn,SockOut);
|
||||
Accept:=true;
|
||||
end
|
||||
else
|
||||
Accept:=false;
|
||||
end;
|
||||
|
||||
type thostaddr= packed array[1..4] of byte;
|
||||
|
||||
function htonl( host : longint):longint; inline;
|
||||
|
@ -191,19 +191,6 @@ Function SetSocketOptions(Sock,Level,OptName:Longint;const OptVal;optlen: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}
|
||||
Procedure Sock2Text(Sock:Longint;Var SockIn,SockOut:Text);
|
||||
|
||||
{Untyped File Support}
|
||||
Procedure Sock2File(Sock:Longint;Var SockIn,SockOut:File);
|
||||
|
||||
{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}
|
||||
function htonl( host : longint):longint; inline;
|
||||
Function NToHl( Net : Longint) : Longint; inline;
|
||||
|
@ -119,79 +119,6 @@ begin
|
||||
Bind:=(SocketError=0);
|
||||
end;
|
||||
|
||||
|
||||
|
||||
Function DoAccept(Sock:longint;var addr:string):longint;
|
||||
var
|
||||
UnixAddr : TUnixSockAddr;
|
||||
AddrLen : longint;
|
||||
begin
|
||||
AddrLen:=length(addr)+3;
|
||||
DoAccept:=Accept(Sock,UnixAddr,AddrLen);
|
||||
Move(UnixAddr.Path,Addr[1],AddrLen);
|
||||
SetLength(Addr,AddrLen);
|
||||
end;
|
||||
|
||||
|
||||
|
||||
Function DoConnect(Sock:longint;const addr:string):Boolean;
|
||||
var
|
||||
UnixAddr : TUnixSockAddr;
|
||||
AddrLen : longint;
|
||||
begin
|
||||
Str2UnixSockAddr(addr,UnixAddr,AddrLen);
|
||||
DoConnect:=Connect(Sock,UnixAddr,AddrLen);
|
||||
end;
|
||||
|
||||
Function Accept(Sock:longint;var addr:string;var SockIn,SockOut:text):Boolean;
|
||||
var
|
||||
s : longint;
|
||||
begin
|
||||
S:=DoAccept(Sock,addr);
|
||||
if S>0 then
|
||||
begin
|
||||
Sock2Text(S,SockIn,SockOut);
|
||||
Accept:=true;
|
||||
end
|
||||
else
|
||||
Accept:=false;
|
||||
end;
|
||||
|
||||
|
||||
|
||||
Function Accept(Sock:longint;var addr:string;var SockIn,SockOut:File):Boolean;
|
||||
var
|
||||
s : longint;
|
||||
begin
|
||||
S:=DoAccept(Sock,addr);
|
||||
if S>0 then
|
||||
begin
|
||||
Sock2File(S,SockIn,SockOut);
|
||||
Accept:=true;
|
||||
end
|
||||
else
|
||||
Accept:=false;
|
||||
end;
|
||||
|
||||
|
||||
|
||||
Function Connect(Sock:longint;const addr:string;var SockIn,SockOut:text):Boolean;
|
||||
begin
|
||||
Connect:=DoConnect(Sock,addr);
|
||||
If Connect then
|
||||
Sock2Text(Sock,SockIn,SockOut);
|
||||
end;
|
||||
|
||||
|
||||
|
||||
Function Connect(Sock:longint;const addr:string;var SockIn,SockOut:file):Boolean;
|
||||
begin
|
||||
Connect:=DoConnect(Sock,addr);
|
||||
if Connect then
|
||||
Sock2File(Sock,SockIn,SockOut);
|
||||
end;
|
||||
|
||||
|
||||
Function CloseSocket (Sock:Longint):Longint;
|
||||
begin
|
||||
if fpclose(Sock)=0 then
|
||||
|
@ -140,79 +140,6 @@ begin
|
||||
Bind:=(SocketError=0);
|
||||
end;
|
||||
|
||||
|
||||
|
||||
Function DoAccept(Sock:longint;var addr:string):longint;
|
||||
var
|
||||
UnixAddr : TUnixSockAddr;
|
||||
AddrLen : longint;
|
||||
begin
|
||||
AddrLen:=length(addr)+3;
|
||||
DoAccept:=Accept(Sock,UnixAddr,AddrLen);
|
||||
Move(UnixAddr.Path,Addr[1],AddrLen);
|
||||
SetLength(Addr,AddrLen);
|
||||
end;
|
||||
|
||||
|
||||
|
||||
Function DoConnect(Sock:longint;const addr:string):Boolean;
|
||||
var
|
||||
UnixAddr : TUnixSockAddr;
|
||||
AddrLen : longint;
|
||||
begin
|
||||
Str2UnixSockAddr(addr,UnixAddr,AddrLen);
|
||||
DoConnect:=Connect(Sock,UnixAddr,AddrLen);
|
||||
end;
|
||||
|
||||
Function Accept(Sock:longint;var addr:string;var SockIn,SockOut:text):Boolean;
|
||||
var
|
||||
s : longint;
|
||||
begin
|
||||
S:=DoAccept(Sock,addr);
|
||||
if S>0 then
|
||||
begin
|
||||
Sock2Text(S,SockIn,SockOut);
|
||||
Accept:=true;
|
||||
end
|
||||
else
|
||||
Accept:=false;
|
||||
end;
|
||||
|
||||
|
||||
|
||||
Function Accept(Sock:longint;var addr:string;var SockIn,SockOut:File):Boolean;
|
||||
var
|
||||
s : longint;
|
||||
begin
|
||||
S:=DoAccept(Sock,addr);
|
||||
if S>0 then
|
||||
begin
|
||||
Sock2File(S,SockIn,SockOut);
|
||||
Accept:=true;
|
||||
end
|
||||
else
|
||||
Accept:=false;
|
||||
end;
|
||||
|
||||
|
||||
|
||||
Function Connect(Sock:longint;const addr:string;var SockIn,SockOut:text):Boolean;
|
||||
begin
|
||||
Connect:=DoConnect(Sock,addr);
|
||||
If Connect then
|
||||
Sock2Text(Sock,SockIn,SockOut);
|
||||
end;
|
||||
|
||||
|
||||
|
||||
Function Connect(Sock:longint;const addr:string;var SockIn,SockOut:file):Boolean;
|
||||
begin
|
||||
Connect:=DoConnect(Sock,addr);
|
||||
if Connect then
|
||||
Sock2File(Sock,SockIn,SockOut);
|
||||
end;
|
||||
|
||||
|
||||
// fsread and fswrite are used in socket.inc
|
||||
procedure fdwrite (Handle:longint; VAR Data; Len : LONGINT);
|
||||
begin
|
||||
|
@ -137,75 +137,3 @@ begin
|
||||
Bind:=(SocketError=0);
|
||||
end;
|
||||
|
||||
|
||||
|
||||
Function DoAccept(Sock:longint;var addr:string):longint;
|
||||
var
|
||||
UnixAddr : TUnixSockAddr;
|
||||
AddrLen : longint;
|
||||
begin
|
||||
AddrLen:=length(addr)+3;
|
||||
DoAccept:=Accept(Sock,UnixAddr,AddrLen);
|
||||
Move(UnixAddr.Path,Addr[1],AddrLen);
|
||||
SetLength(Addr,AddrLen);
|
||||
end;
|
||||
|
||||
|
||||
|
||||
Function DoConnect(Sock:longint;const addr:string):Boolean;
|
||||
var
|
||||
UnixAddr : TUnixSockAddr;
|
||||
AddrLen : longint;
|
||||
begin
|
||||
Str2UnixSockAddr(addr,UnixAddr,AddrLen);
|
||||
DoConnect:=Connect(Sock,UnixAddr,AddrLen);
|
||||
end;
|
||||
|
||||
Function Accept(Sock:longint;var addr:string;var SockIn,SockOut:text):Boolean;
|
||||
var
|
||||
s : longint;
|
||||
begin
|
||||
S:=DoAccept(Sock,addr);
|
||||
if S>0 then
|
||||
begin
|
||||
Sock2Text(S,SockIn,SockOut);
|
||||
Accept:=true;
|
||||
end
|
||||
else
|
||||
Accept:=false;
|
||||
end;
|
||||
|
||||
|
||||
|
||||
Function Accept(Sock:longint;var addr:string;var SockIn,SockOut:File):Boolean;
|
||||
var
|
||||
s : longint;
|
||||
begin
|
||||
S:=DoAccept(Sock,addr);
|
||||
if S>0 then
|
||||
begin
|
||||
Sock2File(S,SockIn,SockOut);
|
||||
Accept:=true;
|
||||
end
|
||||
else
|
||||
Accept:=false;
|
||||
end;
|
||||
|
||||
|
||||
|
||||
Function Connect(Sock:longint;const addr:string;var SockIn,SockOut:text):Boolean;
|
||||
begin
|
||||
Connect:=DoConnect(Sock,addr);
|
||||
If Connect then
|
||||
Sock2Text(Sock,SockIn,SockOut);
|
||||
end;
|
||||
|
||||
|
||||
|
||||
Function Connect(Sock:longint;const addr:string;var SockIn,SockOut:file):Boolean;
|
||||
begin
|
||||
Connect:=DoConnect(Sock,addr);
|
||||
if Connect then
|
||||
Sock2File(Sock,SockIn,SockOut);
|
||||
end;
|
||||
|
||||
|
@ -41,10 +41,6 @@ type
|
||||
{ unix socket specific functions }
|
||||
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 fpbind (s:cint; addrx : psockaddr; addrlen : tsocklen):cint; maybelibc
|
||||
|
Loading…
Reference in New Issue
Block a user