mirror of
				https://gitlab.com/freepascal.org/fpc/source.git
				synced 2025-11-04 07:59:34 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			191 lines
		
	
	
		
			6.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			191 lines
		
	
	
		
			6.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
{
 | 
						|
    $Id$
 | 
						|
    This file is part of the Free Pascal run time library.
 | 
						|
    Copyright (c) 1999-2000 by the Free Pascal development team
 | 
						|
 | 
						|
    See the file COPYING.FPC, included in this distribution,
 | 
						|
    for details about the copyright.
 | 
						|
 | 
						|
    This program is distributed in the hope that it will be useful,
 | 
						|
    but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
						|
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 | 
						|
 | 
						|
 **********************************************************************}
 | 
						|
Const
 | 
						|
  { Socket Types }
 | 
						|
  SOCK_STREAM     = 1;               { stream (connection) socket   }
 | 
						|
  SOCK_DGRAM      = 2;               { datagram (conn.less) socket  }
 | 
						|
  SOCK_RAW        = 3;               { raw socket                   }
 | 
						|
  SOCK_RDM        = 4;               { reliably-delivered message   }
 | 
						|
  SOCK_SEQPACKET  = 5;               { sequential packet socket     }
 | 
						|
 | 
						|
  AF_UNSPEC       = 0;
 | 
						|
  AF_UNIX         = 1;      { Unix domain sockets          }
 | 
						|
  AF_INET         = 2;      { Internet IP Protocol         }
 | 
						|
 | 
						|
  {  Protocol Families }
 | 
						|
  PF_UNSPEC       = AF_UNSPEC;
 | 
						|
  PF_UNIX         = AF_UNIX;
 | 
						|
  PF_INET         = AF_INET;
 | 
						|
 | 
						|
{$Ifdef Unix}
 | 
						|
{$ifndef BSD}
 | 
						|
{ For setsockoptions(2) }
 | 
						|
         SOL_SOCKET  =   1;
 | 
						|
         SO_DEBUG    =   1;
 | 
						|
         SO_REUSEADDR=   2;
 | 
						|
         SO_TYPE     =   3;
 | 
						|
         SO_ERROR    =   4;
 | 
						|
         SO_DONTROUTE=   5;
 | 
						|
         SO_BROADCAST=   6;
 | 
						|
         SO_SNDBUF   =   7;
 | 
						|
         SO_RCVBUF   =   8;
 | 
						|
         SO_KEEPALIVE=   9;
 | 
						|
         SO_OOBINLINE=   10;
 | 
						|
         SO_NO_CHECK =   11;
 | 
						|
         SO_PRIORITY =   12;
 | 
						|
         SO_LINGER   =   13;
 | 
						|
         SO_BSDCOMPAT=   14;
 | 
						|
{ To add :         SO_REUSEPORT 15 }
 | 
						|
         SO_PASSCRED=    16;
 | 
						|
         SO_PEERCRED=    17;
 | 
						|
         SO_RCVLOWAT=    18;
 | 
						|
         SO_SNDLOWAT=    19;
 | 
						|
         SO_RCVTIMEO=    20;
 | 
						|
         SO_SNDTIMEO=    21;
 | 
						|
 | 
						|
{ Security levels - as per NRL IPv6 - don't actually do anything }
 | 
						|
 | 
						|
         SO_SECURITY_AUTHENTICATION      =   22;
 | 
						|
         SO_SECURITY_ENCRYPTION_TRANSPORT=   23;
 | 
						|
         SO_SECURITY_ENCRYPTION_NETWORK  =   24;
 | 
						|
 | 
						|
         SO_BINDTODEVICE=   25;
 | 
						|
 | 
						|
{ Socket filtering }
 | 
						|
 | 
						|
         SO_ATTACH_FILTER=  26;
 | 
						|
         SO_DETACH_FILTER=  27;
 | 
						|
 | 
						|
         SO_PEERNAME     =  28;
 | 
						|
{$ELSE}
 | 
						|
        SOL_SOCKET = $FFFF;
 | 
						|
        SO_DEBUG         =$0001;        { turn on debugging info recording }
 | 
						|
        SO_ACCEPTCONN    =$0002;        { socket has had listen() }
 | 
						|
        SO_REUSEADDR     =$0004;        { allow local address reuse }
 | 
						|
        SO_KEEPALIVE     =$0008;        { keep connections alive }
 | 
						|
        SO_DONTROUTE     =$0010;        { just use interface addresses }
 | 
						|
        SO_BROADCAST     =$0020;        { permit sending of broadcast msgs }
 | 
						|
        SO_USELOOPBACK   =$0040;        { bypass hardware when possible }
 | 
						|
        SO_LINGER        =$0080;        { linger on close if data present }
 | 
						|
        SO_OOBINLINE     =$0100;        { leave received OOB data in line }
 | 
						|
        SO_REUSEPORT     =$0200;        { allow local address & port reuse }
 | 
						|
        SO_TIMESTAMP     =$0400;        { timestamp received dgram traffic }
 | 
						|
 | 
						|
{
 | 
						|
 * Additional options, not kept in so_options.
 | 
						|
 }
 | 
						|
        SO_SNDBUF        =$1001;        { send buffer size }
 | 
						|
        SO_RCVBUF        =$1002;        { receive buffer size }
 | 
						|
        SO_SNDLOWAT      =$1003;        { send low-water mark }
 | 
						|
        SO_RCVLOWAT      =$1004;        { receive low-water mark }
 | 
						|
        SO_SNDTIMEO      =$1005;        { send timeout }
 | 
						|
        SO_RCVTIMEO      =$1006;        { receive timeout }
 | 
						|
        SO_ERROR         =$1007;        { get error status and clear }
 | 
						|
        SO_TYPE          =$1008;        { get socket type }
 | 
						|
 | 
						|
 | 
						|
        SHUT_RD         =0;             { shut down the reading side }
 | 
						|
        SHUT_WR         =1;             { shut down the writing side }
 | 
						|
        SHUT_RDWR       =2;             { shut down both sides }
 | 
						|
 | 
						|
{$endif}
 | 
						|
{$ENDIF}
 | 
						|
 | 
						|
const
 | 
						|
  { Two constants to determine whether part of soket is for in or output }
 | 
						|
  S_IN = 0;
 | 
						|
  S_OUT = 1;
 | 
						|
 | 
						|
Type
 | 
						|
  TSockAddr = packed Record
 | 
						|
    {$ifdef BSD}
 | 
						|
     len : byte;
 | 
						|
     family:byte;
 | 
						|
    {$ELSE}
 | 
						|
     family:word;  { was byte, fixed }
 | 
						|
    {$ENDIF}
 | 
						|
    data  :array [0..13] of char;
 | 
						|
    end;
 | 
						|
 | 
						|
  TInetSockAddr = packed Record
 | 
						|
    family:Word;
 | 
						|
    port  :Word;
 | 
						|
    addr  :Cardinal;
 | 
						|
    pad   :array [1..8] of byte; { to get to the size of sockaddr... }
 | 
						|
    end;
 | 
						|
 | 
						|
  TSockArray = Array[1..2] of Longint;
 | 
						|
 | 
						|
Var
 | 
						|
  SocketError:Longint;
 | 
						|
 | 
						|
{Basic Socket Functions}
 | 
						|
Function Socket(Domain,SocketType,Protocol:Longint):Longint;
 | 
						|
Function Send(Sock:Longint;Var Addr;AddrLen,Flags:Longint):Longint;
 | 
						|
Function Recv(Sock:Longint;Var Addr;AddrLen,Flags:Longint):Longint;
 | 
						|
Function Bind(Sock:Longint;Var Addr;AddrLen:Longint):Boolean;
 | 
						|
Function Listen (Sock,MaxConnect:Longint):Boolean;
 | 
						|
Function Accept(Sock:Longint;Var Addr;Var Addrlen:Longint):Longint;
 | 
						|
Function Connect(Sock:Longint;Var 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;Var 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}
 | 
						|
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;
 | 
						|
 | 
						|
{
 | 
						|
  $Log$
 | 
						|
  Revision 1.4  2000-11-13 13:40:04  marco
 | 
						|
   * Renamefest
 | 
						|
 | 
						|
  Revision 1.3  2000/09/11 14:53:14  marco
 | 
						|
   * FreeBSD adjustments patched in from fixes branch
 | 
						|
 | 
						|
  Revision 1.1.2.1  2000/09/10 16:12:05  marco
 | 
						|
  BSD SO_ constants added
 | 
						|
 | 
						|
  Revision 1.1  2000/07/13 06:30:48  michael
 | 
						|
  + Initial import
 | 
						|
 | 
						|
  Revision 1.7  2000/06/19 13:31:46  michael
 | 
						|
  + Corrected GetSocketOptions
 | 
						|
 | 
						|
  Revision 1.6  2000/06/02 17:30:43  marco
 | 
						|
   * added some constants for getsocketoptions under a linux define.
 | 
						|
        Allows server example to work ok.
 | 
						|
 | 
						|
  Revision 1.5  2000/02/09 16:59:31  peter
 | 
						|
    * truncated log
 | 
						|
 | 
						|
  Revision 1.4  2000/01/07 16:41:36  daniel
 | 
						|
    * copyright 2000
 | 
						|
 | 
						|
  Revision 1.3  2000/01/07 16:32:25  daniel
 | 
						|
    * copyright 2000 added
 | 
						|
 | 
						|
}
 |