3 This file is part of the Free Pascal run time library
.
4 Copyright (c
) 1999-2000 by the Free Pascal development team
6 See the file COPYING
.FPC
, included
in this distribution
,
7 for details about the copyright
.
9 This program is distributed
in the hope that it will be useful
,
10 but WITHOUT ANY WARRANTY
; without even the implied warranty of
11 MERCHANTABILITY
or FITNESS FOR A PARTICULAR PURPOSE
.
13 **********************************************************************}
23 AF_MAX
= WinSock
.AF_MAX
;
30 { Include filerec
and textrec structures
}
34 {******************************************************************************
35 Basic Socket Functions
36 ******************************************************************************}
38 Function
socket(Domain
,SocketType
,Protocol
:Longint):Longint;
40 Socket
:=WinSock
.Socket(Domain
,SocketType
,ProtoCol
);
42 SocketError
:=WSAGetLastError
47 Function
Send(Sock
:Longint;Var Addr
;AddrLen
,Flags
:Longint):Longint;
49 Send
:=WinSock
.Send(Sock
,Addr
,AddrLen
,Flags
);
51 SocketError
:=WSAGetLastError
56 Function
Recv(Sock
:Longint;Var Addr
;AddrLen
,Flags
:Longint):Longint;
58 Recv
:=WinSock
.Recv(Sock
,Addr
,AddrLen
,Flags
);
60 SocketError
:=WSAGetLastError
65 Function
Bind(Sock
:Longint;Var Addr
;AddrLen
:Longint):Boolean;
71 l
:=WinSock
.Bind(Sock
,WinSock
.PSockAddr(@Addr),AddrLen
);
74 SocketError
:=WSAGetLastError
;
84 Function
Listen(Sock
,MaxConnect
:Longint):Boolean;
90 l
:=WinSock
.Listen(Sock
,MaxConnect
);
93 SocketError
:=WSAGetLastError
;
103 Function
Accept(Sock
:Longint;Var Addr
;Var Addrlen
:Longint):Longint;
105 Accept
:=WinSock
.Accept(Sock
,WinSock
.PSockAddr(@Addr),plongint(@AddrLen));
107 SocketError
:=WSAGetLastError
112 Function
Connect(Sock
:Longint;Var Addr
;Addrlen
:Longint):Boolean;
115 Connect
:=WinSock
.Connect(Sock
,WinSock
.TSockAddr(Addr
),AddrLen
)=0;
117 SocketError
:=WSAGetLastError
122 Function
Shutdown(Sock
:Longint;How
:Longint):Longint;
124 ShutDown
:=WinSock
.ShutDown(Sock
,How
);
126 SocketError
:=WSAGetLastError
131 Function
GetSocketName(Sock
:Longint;Var Addr
;Var Addrlen
:Longint):Longint;
133 GetSocketName
:=WinSock
.GetSockName(Sock
,WinSock
.TSockAddr(Addr
),AddrLen
);
134 if GetSocketName
<0 then
135 SocketError
:=WSAGetLastError
140 Function
GetPeerName(Sock
:Longint;Var Addr
;Var Addrlen
:Longint):Longint;
142 GetPeerName
:=WinSock
.GetPeerName(Sock
,WinSock
.TSockAddr(Addr
),AddrLen
);
143 if GetPeerName
<0 then
144 SocketError
:=WSAGetLastError
149 Function
SetSocketOptions(Sock
,Level
,OptName
:Longint;Var OptVal
;optlen
:longint):Longint;
151 SetSocketOptions
:=WinSock
.SetSockOpt(Sock
,Level
,OptName
,OptVal
,OptLen
);
152 if SetSocketOptions
<0 then
153 SocketError
:=WSAGetLastError
158 Function
GetSocketOptions(Sock
,Level
,OptName
:Longint;Var OptVal
;Var optlen
:longint):Longint;
160 GetSocketOptions
:=WinSock
.GetSockOpt(Sock
,Level
,OptName
,OptVal
,OptLen
);
161 if GetSocketOptions
<0 then
162 SocketError
:=WSAGetLastError
167 Function
SocketPair(Domain
,SocketType
,Protocol
:Longint;var Pair
:TSockArray):Longint;
169 // SocketPair
:=SocketCall(Socket_Sys_SocketPair
,Domain
,SocketType
,Protocol
,longint(@Pair),0,0);
173 { mimic the linux fdWrite
/fdRead calls for the file/text socket wrapper
}
174 function
fdWrite(handle
: longint
;var bufptr
;size
: dword
) : dword
;
176 fdWrite
:= WinSock
.send(handle
, bufptr
, size
, 0);
177 if fdWrite
= SOCKET_ERROR
then
179 SocketError
:= WSAGetLastError
;
186 function
fdRead(handle
: longint
;var bufptr
;size
: dword
) : dword
;
191 if ioctlsocket(handle
,FIONREAD
,@d) = SOCKET_ERROR
then
193 SocketError
:=WSAGetLastError
;
201 fdRead
:= WinSock
.recv(handle
, bufptr
, size
, 0);
202 if fdRead
= SOCKET_ERROR
then
204 SocketError
:= WSAGetLastError
;
216 { winsocket stack needs an init
. and cleanup code
}
221 WSAStartUp($2,wsadata
);
227 Revision
1.1 2002/02/19 08:26:27 sasu
230 Revision
1.1.2.2 2000/07/28 08:36:16 sg
231 * Applied patch by Markus Kaemmerer
: Fixes fdRead
and fdWrite
233 Revision
1.1.2.1 2000/07/28 06:33:27 sg
234 * Applied patch to
"Connect" by Markus Kaemmerer
: WinSock
.Connect returns
235 zero
when it succeeded
, and not vice versa
.
237 Revision
1.1 2000/07/13 06:31:22 michael
240 Revision
1.7 2000/06/21 22:26:47 pierre
241 * use ioctlsocket
in fdRead
243 Revision
1.6 2000/06/19 13:32:18 michael
244 + Corrected GetSocketOptions
246 Revision
1.5 2000/02/09 16:59:34 peter
249 Revision
1.4 2000/01/07 16:41:52 daniel
252 Revision
1.3 2000/01/07 16:32:34 daniel
253 * copyright
2000 added