Системное программирование в UNIX средствами Free Pascal



         

Описание


uses sockets;

Function Accept(sockfd:Longint;Var address;Var add_len:Longint):Longint;

Function Accept(sockfd:longint;var address:string;

                var SockIn,SockOut:text):Boolean;

Function Accept(sockfd:longint;var address:string;

                var SockIn,SockOut:File):Boolean;

Function Accept(sockfd:longint;var address:TInetSockAddr;

                var SockIn,SockOut:File):Boolean;

Системному вызову accept передается дескриптор сокета, для которого ведется прием соединений. Возвращаемое значение соответствует идентификатору нового сокета, который будет использоваться для связи. Параметр address заполняется информацией о клиенте. Так как связь использует соединение, адрес клиента знать не обязательно, поэтому можно присвоить параметру address значение nil. Если значение address не равно nil, то переменная, на которую указывает параметр add_len, первоначально должна содержать размер структуры адреса, заданной параметром address. После возврата из вызова accept переменная add_len будет содержать реальный размер записанной структуры.

Вторая, третья и четвертая формы вызова accept эквивалентны вызову первой с последующим использованием функции Sock2Text, преобразующей сокет sockfd в две файловые переменные типа Text, одна из которых отвечает за чтение из сокета (SockIn), а другая – за запись в сокет (SockOut).

После подстановки вызовов bind, listen и accept текст программы сервера примет вид:

(* Серверный процесс *)

uses sockets,stdio,linux;

const

  SIZE=sizeof(tinetsockaddr);

  (* Инициализация сокета Internet с номером порта 7000

   * и локальным адресом, заданным в постоянной INADDR_ANY *)

  server:tinetsockaddr = (family:AF_INET; port:7000; addr:INADDR_ANY);

var

  newsockfd:longint;

  sockfd:longint;

begin

  (* Создает сокет *)

  sockfd := socket (AF_INET, SOCK_STREAM, 0);

  if sockfd = -1 then

  begin

    perror ('Ошибка вызова socket');

    halt (1);

  end;

  (* Связавает адрес с сокетом *)




Содержание  Назад  Вперед