123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242 |
- {
- $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 }
- { Protocol families }
- PF_UNSPEC = 0; { Unspecified }
- PF_LOCAL = 1; { Local to host (pipes and file-domain) }
- PF_UNIX = PF_LOCAL; { Old BSD name for PF_LOCAL }
- PF_FILE = PF_LOCAL; { Another non-standard name for PF_LOCAL }
- PF_INET = 2; { IP protocol family }
- { Address families }
- AF_UNSPEC = PF_UNSPEC;
- AF_LOCAL = PF_LOCAL;
- AF_UNIX = PF_UNIX;
- AF_FILE = PF_FILE;
- AF_INET = PF_INET;
- { Flags for send, recv etc. }
- MSG_OOB = $0001; { Process out-of-band data}
- MSG_PEEK = $0002; { Peek at incoming messages }
- MSG_DONTROUTE= $0004; { Don't use local routing }
- MSG_TRYHARD = MSG_DONTROUTE;
- MSG_CTRUNC = $0008; { Control data lost before delivery }
- MSG_PROXY = $0010; { Supply or ask second address }
- MSG_TRUNC = $0020;
- MSG_DONTWAIT = $0040; { Non-blocking I/O }
- MSG_EOR = $0080; { End of record }
- MSG_WAITALL = $0100; { Wait for a full request }
- MSG_FIN = $0200;
- MSG_SYN = $0400;
- MSG_CONFIRM = $0800; { Confirm path validity }
- MSG_RST = $1000;
- MSG_ERRQUERE = $2000; { Fetch message from error queue }
- MSG_NOSIGNAL = $4000; { Do not generate SIGPIPE }
- MSG_MORE = $8000; { Sender will send more }
- {$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;
- SO_TIMESTAMP = 29;
- SCM_TIMESTAMP = SO_TIMESTAMP;
- SO_ACCEPTCONN = 30;
-
-
- SHUT_RD =0; { shut down the reading side }
- SHUT_WR =1; { shut down the writing side }
- SHUT_RDWR =2; { shut down both sides }
-
- {$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;
- Tin6_addr = packed record
- case byte of
- 0: (u6_addr8 : array[0..15] of byte);
- 1: (u6_addr16 : array[0..7] of Word);
- 2: (u6_addr32 : array[0..3] of Cardinal);
- 3: (s6_addr8 : array[0..15] of shortint);
- 4: (s6_addr : array[0..15] of shortint);
- 5: (s6_addr16 : array[0..7] of smallint);
- 6: (s6_addr32 : array[0..3] of LongInt);
- end;
- TInetSockAddr6 = packed Record
- {$ifdef BSD} // as per RFC 2553
- sin6_len : byte;
- sin6_family: byte;
- {$ELSE}
- sin6_family: word;
- {$ENDIF}
- sin6_port : Word;
- sin6_flowinfo : LongInt;
- sin6_addr : Tin6_addr;
- sin6_scope_id : LongInt;
- end;
- sockaddr_in6 = TInetSockAddr6;
- psockaddr_in6 = ^sockaddr_in6;
- TSockArray = Array[1..2] of Longint;
- Var
- SocketError:Longint;
- {Basic Socket Functions}
- Function Socket(Domain,SocketType,Protocol:Longint):Longint;
- Function CloseSocket(Sock:Longint):Longint;
- Function Send(Sock:Longint;Const Buf;BufLen,Flags:Longint):Longint;
- Function SendTo(Sock:Longint;Const Buf;BufLen,Flags:Longint;Var Addr; AddrLen : Longint):Longint;
- Function Recv(Sock:Longint;Var Buf;BufLen,Flags:Longint):Longint;
- Function RecvFrom(Sock : Longint; Var Buf; Buflen,Flags : Longint; Var Addr; AddrLen : Integer) : longint;
- Function Bind(Sock:Longint;Const Addr;AddrLen:Longint):Boolean;
- Function Listen (Sock,MaxConnect:Longint):Boolean;
- Function Accept(Sock:Longint;Var Addr;Var Addrlen:Longint):Longint;
- Function Connect(Sock:Longint;Const 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;Const 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.12 2003-11-23 11:00:07 michael
- + Added IPV6 patch from Johannes Berg
- Revision 1.11 2003/11/22 16:28:56 michael
- + Added several constants
- Revision 1.10 2003/11/09 21:43:15 michael
- + Added some missing socket options and the shut_* constants
- Revision 1.9 2003/03/23 17:47:15 armin
- * CloseSocket added
- Revision 1.8 2002/09/07 15:07:46 peter
- * old logs removed and tabs fixed
- Revision 1.7 2002/02/04 21:29:34 michael
- + merged missing sendto/rcvfrom functions
- }
|