Skip to content

Accept

Accept a connection from a socket (deprecated).

Declaration

Source position: socketsh.inc line 179

  function Accept(Sock: LongInt; var addr: TInetSockAddr; 
                 var SockIn: File; var SockOut: File) : Boolean;
  function Accept(Sock: LongInt; var addr: TInetSockAddr; 
                 var SockIn: text; var SockOut: text) : Boolean;
  function Accept(Sock: LongInt; var addr: string; var SockIn: text; 
                 var SockOut: text) : Boolean;
  function Accept(Sock: LongInt; var addr: string; var SockIn: File; 
                 var SockOut: File) : Boolean;

Description

Accept accepts a connection from a socket Sock, which was listening for a connection. If a connection is accepted, a file descriptor is returned. On error -1 is returned. The returned socket may NOT be used to accept more connections. The original socket remains open.

The Accept call fills the address of the connecting entity in Addr, and sets its length in Addrlen. Addr should be pointing to enough space, and Addrlen should be set to the amount of space available, prior to the call.

The alternate forms of the Accept command, with the Text or File parameters are equivalent to subsequently calling the regular Accept function and the Sock2Text or Sock2File functions. These functions return True if successful, False otherwise.

Errors

On error, -1 is returned, and errors are reported in SocketError, and include the following:

ESockEBADF
The socket descriptor is invalid.
ESockENOTSOCK
The descriptor is not a socket.
SYS_EOPNOTSUPP
The socket type doesn't support the Listen operation.
ESockEFAULT
Addr points outside your address space.
ESockEWOULDBLOCK
The requested operation would block the process.

See also

Name Description
Connect Open a connection to a server socket (deprecated).
FPBind Bind a socket to an address.
FPConnect Open a connection to a server socket.
FPListen Listen for connections on a socket.

Example

Program server;
{
  Program to test Sockets unit by Michael van Canneyt and Peter Vreman
  Server Version, First Run sock_svr to let it create a socket and then
  sock_cli to connect to that socket
}
{$mode fpc}
uses Sockets;
Var
  FromName : string;
  Buffer   : string[255];
  S        : Longint;
  Sin,Sout : Text;
  SAddr    : TInetSockAddr;
procedure perror (const S:string);
begin
  writeln (S,SocketError);
  halt(100);
end;
begin
  S:=fpSocket (AF_INET,SOCK_STREAM,0);
  if SocketError<>0 then
   Perror ('Server : Socket : ');
  SAddr.sin_family:=AF_INET;
  { port 50000 in network order }
  SAddr.sin_port:=htons(5000);
  SAddr.sin_addr.s_addr:=0;
  if fpBind(S,@SAddr,sizeof(saddr))=-1 then
   PError ('Server : Bind : ');
  if fpListen (S,1)=-1 then
   PError ('Server : Listen : ');
  Writeln('Waiting for Connect from Client, run now sock_cli in an other tty');
  if Accept(S,FromName,Sin,Sout) then
   PError ('Server : Accept : '+fromname);
  Reset(Sin);
  ReWrite(Sout);
  Writeln(Sout,'Message From Server');
  Flush(SOut);
  while not eof(sin) do
   begin
     Readln(Sin,Buffer);
     Writeln('Server : read : ',buffer);
   end;
end.