[Overview][Constants][Types][Procedures and functions][Index] | Reference for unit 'Sockets' (#rtl)

# fpaccept

Accept a connection from a socket.

## Declaration

Source position: socketsh.inc line 168

`function fpaccept(`
`s: cint;`
`addrx: psockaddr;`
`addrlen: pSockLen`
`):cint;`

## Description

Accept accepts a connection from a socket S, which was listening for a connection. If a connection is accepted, a file descriptor is returned (positive number). 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 Addrx, and sets its length in Addrlen. Addrx should be pointing to enough space, and Addrlen should be set to the amount of space available, prior to the call.

## 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

fpListen |  | Listen for connections on a socket.
fpConnect |  | Open a connection to a server socket.
fpBind |  | Bind a socket to an address.

## 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.

Documentation generated on: Feb 26 2014