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

       

Первый параметр csockfd является дескриптором


uses sockets;
Function Connect(csockfd:Longint; Var address; add_len:Longint): Longint;
Function Connect(csockfd:longint; const address:string;
                 var SockIn,SockOut:text):Boolean;
Function Connect(csockfd:longint; const address:string;
                 var SockIn,SockOut:file):Boolean;
Function Connect(csockfd:longint; const address:TInetSockAddr;
                 var SockIn,SockOut:file):Boolean;
Первый параметр csockfd является дескриптором сокета клиента и не имеет отношения к дескриптору сокета на сервере. Параметр address указывает на структуру, содержащую адрес сервера, либо на адрес в формате строки. Параметр add_len определяет размер используемой структуры адреса.
Вторая, третья и четвертая формы вызова connect эквивалентны вызову первой с последующим использованием функции Sock2Text, преобразующей сокет sockfd в две файловые переменные типа Text, одна из которых отвечает за чтение из сокета (SockIn), а другая – за запись в сокет (SockOut).
Продолжая составление рассматриваемого примера, запишем следующий вариант текста программы клиента:
(* Клиентский процесс *)
uses sockets,stdio,linux;


const
  SIZE=sizeof(tinetsockaddr);
  server:tinetsockaddr=(family:AF_INET; port:7000);
var
  sockfd:longint;
begin
  (* Преобразовать и сохранить IP address сервера *)
  server.addr := inet_addr ('127.0.0.1');
  (* Создать сокет *)
  sockfd := socket (AF_INET, SOCK_STREAM, 0);
  if sockfd = -1 then
  begin
    perror ('Ошибка вызова socket');
    halt (1);
  end;
  (* Соединяет сокет с сервером *)
  if not connect (sockfd, server, SIZE) then
  begin
    perror ('Ошибка вызова connect');
    halt (1);
  end;
  (* Обмен данными с сервером *)
end.
Адрес сервера преобразуется в нужный формат при помощи вызова inet_addr. Адреса известных компьютеров локальной сети обычно можно найти в файле /etc/hosts.

Содержание раздела