Скачиваний:
17
Добавлен:
08.01.2014
Размер:
1.7 Кб
Скачать
(* уЕТЧЕТОЩК РТПГЕУУ *)
uses sockets,stdio,linux;

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

var
newsockfd:longint;

procedure catcher (sig:integer);cdecl;
begin
fdclose (newsockfd);
halt (0);
end;

var
sockfd:longint;
c:char;
act:sigactionrec;
mask:sigset_t;
client:tinetsockaddr;
clientaddrlen:longint;
begin
act.handler.sh := @catcher;
sigfillset (@mask);
act.sa_mask:=mask.__val[0];
sigaction (SIGPIPE, @act, nil);

(* хУФБОПЧЙФШ БВПОЕОФУЛХА ФПЮЛХ УПЛЕФБ *)
sockfd := socket (AF_INET, SOCK_STREAM, 0);
if sockfd = -1 then
begin
perror ('пЫЙВЛБ ЧЩЪПЧБ socket');
halt (1);
end;

(* уЧСЪБФШ БДТЕУ У БВПОЕОФУЛПК ФПЮЛПК *)
if not bind (sockfd, server, SIZE) then
begin
perror ('пЫЙВЛБ ЧЩЪПЧБ bind');
halt (1);
end;

(* чЛМАЮЙФШ РТЙЕН УПЕДЙОЕОЙК *)
if not listen (sockfd, 5) then
begin
perror ('ПЫЙВЛБ ЧЩЪПЧБ listen');
halt (1);
end;

while true do
begin
(* рТЙЕН ЪБРТПУБ ОБ УПЕДЙОЕОЙЕ *)
newsockfd := accept (sockfd, client, clientaddrlen);
if newsockfd = -1 then
begin
perror ('пЫЙВЛБ ЧЩЪПЧБ accept');
continue;
end;

(* уПЪДБФШ ДПЮЕТОЙК РТПГЕУУ ДМС ТБВПФЩ У УПЕДЙОЕОЙЕН *)
if fork = 0 then
begin
while recv (newsockfd, c, 1, 0) > 0 do
begin
c := upcase (c);
send (newsockfd, c, 1, 0);
end;

(* рПУМЕ ФПЗП, ЛБЛ ЛМЙЕОФ РТЕЛТБФЙФ РЕТЕДБЮХ ДБООЩИ,
* УПЛЕФ НПЦЕФ ВЩФШ ЪБЛТЩФ Й ДПЮЕТОЙК РТПГЕУУ
* ЪБЧЕТЫБЕФ ТБВПФХ *)
fdclose (newsockfd);
halt (0);
end;

(* ч ТПДЙФЕМШУЛПН РТПГЕУУЕ newsockfd ОЕ ОХЦЕО *)
fdclose (newsockfd);
end;
end.
Соседние файлы в папке 10