2
$Id: unixsock.inc,v 1.2 2004/01/22 13:55:02 marco Exp $
3
This file is part of the Free Pascal run time library.
4
(c) 2000-2003 by Marco van de Voort
5
member of the Free Pascal development team.
7
See the file COPYING.FPC, included in this distribution,
8
for details about the copyright.
10
socket call implementations for FreeBSD
12
This program is distributed in the hope that it will be useful,
13
but WITHOUT ANY WARRANTY;without even the implied warranty of
14
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18
{******************************************************************************
19
Basic Socket Functions
20
******************************************************************************}
22
Function socket(Domain,SocketType,Protocol:Longint):Longint;
24
Socket:=Do_Syscall(syscall_nr_socket,Domain,SocketType,Protocol);
27
Function CloseSocket (Sock:Longint):Longint;
29
if fpclose(Sock)=0 then
34
Function Send(Sock:Longint;Const Buf;BufLen,Flags:Longint):Longint;
36
Send:=do_syscall(syscall_nr_sendto,Sock,Longint(@Buf),BufLen,Flags,0,0);
39
Function SendTo(Sock:Longint;Const Buf;BufLen,Flags:Longint;Var Addr; AddrLen : Longint):Longint;
41
Sendto:=do_syscall(syscall_nr_Sendto,Sock,Longint(@Buf),BufLen,Flags,Longint(@Addr),AddrLen);
44
Function Recv(Sock:Longint;Var Buf;BufLen,Flags:Longint):Longint;
46
Recv:=do_syscall(syscall_nr_Recvfrom,Sock,Longint(@Buf),BufLen,Flags,0,0);
49
Function RecvFrom(Sock : Longint; Var Buf; Buflen,Flags : Longint; Var Addr ; AddrLen : Integer) : longint;
52
RecvFrom:=do_syscall(syscall_nr_Recvfrom,Sock,Longint(@buf),buflen,flags,Longint(@Addr),AddrLen);
55
Function Bind(Sock:Longint;Const Addr;AddrLen:Longint):Boolean;
57
Bind:=(do_syscall(syscall_nr_Bind,Sock,Longint(@Addr),AddrLen)=0);
60
Function Listen(Sock,MaxConnect:Longint):Boolean;
62
Listen:=(do_syscall(syscall_nr_Listen,Sock,MaxConnect,0)=0);
65
Function Accept(Sock:Longint;Var Addr;Var Addrlen:Longint):Longint;
67
Accept:=do_syscall(syscall_nr_accept,Sock,longint(@Addr),longint(@AddrLen));
72
Function Connect(Sock:Longint;Const Addr;Addrlen:Longint): boolean;
75
Connect:=do_syscall(syscall_nr_connect,Sock,longint(@Addr),AddrLen)=0;
79
Function Shutdown(Sock:Longint;How:Longint):Longint;
81
ShutDown:=do_syscall(syscall_nr_shutdown,Sock,How);
85
Function GetSocketName(Sock:Longint;Var Addr;Var Addrlen:Longint):Longint;
87
GetSocketName:=do_syscall(syscall_nr_GetSockName,Sock,longint(@Addr),longint(@AddrLen));
92
Function GetPeerName(Sock:Longint;Var Addr;Var Addrlen:Longint):Longint;
94
GetPeerName:=do_syscall(syscall_nr_GetPeerName,Sock,longint(@Addr),longint(@AddrLen));
99
Function SetSocketOptions(Sock,Level,OptName:Longint;Const OptVal;optlen:longint):Longint;
101
SetSocketOptions:=do_syscall(syscall_nr_SetSockOpt,Sock,Level,OptName,Longint(@OptVal),OptLen,0);
106
Function GetSocketOptions(Sock,Level,OptName:Longint;Var OptVal;Var optlen:longint):Longint;
108
GetSocketOptions:=do_syscall(syscall_nr_GetSockOpt,Sock,Level,OptName,Longint(@OptVal),OptLen,0);
113
Function SocketPair(Domain,SocketType,Protocol:Longint;var Pair:TSockArray):Longint;
115
SocketPair:=do_syscall(syscall_nr_SocketPair,Domain,SocketType,Protocol,longint(@Pair),0,0);
118
{******************************************************************************
120
******************************************************************************}
122
Procedure Str2UnixSockAddr(const addr:string;var t:TUnixSockAddr;var len:longint);
124
Move(Addr[1],t.Path,length(Addr));
126
t.Path[length(Addr)]:=#0;
131
Function Bind(Sock:longint;const addr:string):boolean;
133
UnixAddr : TUnixSockAddr;
136
Str2UnixSockAddr(addr,UnixAddr,AddrLen);
137
Bind(Sock,UnixAddr,AddrLen);
138
Bind:=(SocketError=0);
143
Function DoAccept(Sock:longint;var addr:string):longint;
145
UnixAddr : TUnixSockAddr;
148
AddrLen:=length(addr)+3;
149
DoAccept:=Accept(Sock,UnixAddr,AddrLen);
150
Move(UnixAddr.Path,Addr[1],AddrLen);
151
SetLength(Addr,AddrLen);
156
Function DoConnect(Sock:longint;const addr:string):Boolean;
158
UnixAddr : TUnixSockAddr;
161
Str2UnixSockAddr(addr,UnixAddr,AddrLen);
162
DoConnect:=Connect(Sock,UnixAddr,AddrLen);
165
Function Accept(Sock:longint;var addr:string;var SockIn,SockOut:text):Boolean;
169
S:=DoAccept(Sock,addr);
172
Sock2Text(S,SockIn,SockOut);
181
Function Accept(Sock:longint;var addr:string;var SockIn,SockOut:File):Boolean;
185
S:=DoAccept(Sock,addr);
188
Sock2File(S,SockIn,SockOut);
197
Function Connect(Sock:longint;const addr:string;var SockIn,SockOut:text):Boolean;
199
Connect:=DoConnect(Sock,addr);
201
Sock2Text(Sock,SockIn,SockOut);
206
Function Connect(Sock:longint;const addr:string;var SockIn,SockOut:file):Boolean;
208
Connect:=DoConnect(Sock,addr);
210
Sock2File(Sock,SockIn,SockOut);
214
$Log: unixsock.inc,v $
215
Revision 1.2 2004/01/22 13:55:02 marco
216
* first port that shows some life based on FPC_USE_LIBC
218
Revision 1.4 2004/01/04 01:11:28 marco
219
* a new qod port of the freebsd rtl. To be refined in the coming days.
221
Revision 1.9 2004/01/03 12:18:29 marco
222
* a lot of copyright notices and CVS logs added and fixed
224
Revision 1.8 2003/09/15 07:09:58 marco
225
* small fixes, round 1
227
Revision 1.7 2003/03/23 17:47:15 armin
230
Revision 1.6 2002/09/07 16:01:18 peter
231
* old logs removed and tabs fixed
233
Revision 1.5 2002/02/05 07:54:34 marco