Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ответы по ОС.doc
Скачиваний:
50
Добавлен:
24.09.2019
Размер:
202.24 Кб
Скачать

47.Предназначение системного вызова bind().

Прототип функции bind выглядит следующим образом:

#include <sys/types.h> #include <sys/socket.h>

bind { int sid, struct sockaddr* addr p, int len );

Эта функция присваивает гнезду имя. Гнездо обозначается аргументом sid, значение которого, возвращенное функцией socket, представляет собой дескриптор гнезда. Аргумент addr р указывает на структуру, содержащую имя, которое должно быть присвоено гнезду. Аргумент len задает размер структуры, на которую указывает аргумент addr р.

В каждом домене используется своя структура объекта, на который указывает аргумент addr р. В частности, в случае гнезда домена UNIX присваиваемое имя представляет собой путевое UNIX-имя, а структура объекта, на который указывает аргумент addr р, имеет такой вид:

struct sockaddr {

short sun family; char sun path[];

Здесь полю sunJamily следует присвоить значение AFUNIX, a поле sun path должно содержать путевое UNIX-имя. При успешном выполнении вызова bind в файловой системе создается файл с именем, заданным в поле sun path. Если гнездо больше не нужно, этот файл следует удалить с помощью API unlink.

В случае гнезда домена Internet присваиваемое имя состоит из хост-имени машины и номера порта, а структура объекта, на который указывает аргумент addr р, имеет такой вид:

struct sockaddr in {

short u short

struct in addr

sin family; sin port; sin addr;

Здесь полю sinJamily следует присвоить значение AF INET. Поле sin port - это номер порта, а поле sinjaddr - имя хост-машины, для которой создается гнездо. Структура sockaddr in определяется в заголовке <neti-net/in.h>.

При успешном выполнении эта функция возвращает О, а в случае неудачи возвращает -I.

48.Предназначение системного вызова listen().

Прототип функции listen выглядит следующим образом:

#include <sys/types.h> #include <sys/socket.h>

int listen { int sid, int size );

Эта функция вызывается серверным процессом для создания гнезда, ориентированного на установление соединения (типа SOCK STREAM или SOCK SEQPACKET).

Аргумент sid представляет собой дескриптор гнезда, возвращенный функцией socket. Аргумент size задает максимальное число запросов на установление соединения, которые могут быть поставлены в очередь к данному гнезду. В большинстве UNIX-систем максимально допустимое значение аргумента size - 5.

При успешном выполнении эта функция возвращает О, а в случае неудачи возвращает -1.

49.Предназначение системного вызова accept().

Прототип функции accept выглядит следующим образом:

#include <sys/types.h> #include <sys/socket.h>

accept { int sid, struct socloddr* addr p, int len p );

Эта функция вызывается в серверном процессе для установления соединения с клиентским гнездом (которое делает запрос на установление соединения посредством вызова функции connect).

Аргумент представляет собой дескриптор гнезда, возвращенный функцией socket. Аргумент addr р - это указатель на адрес объекта типа struct sock; в нем хранится имя клиентского гнезда, с которым устанавливает соединение серверное гнездо.

Аргумент len р изначально устанавливается равным максимальному размеру объекта, указанному аргументом addr р. При возврате он содержет размер имени клиентского гнезда, на которое указывает аргумент addr р.

Если аргумент addr р или аргумент len р имеет значение NULL, эта функция не передает имя клиентского гнезда обратно в вызывающий процесс.

В случае неудачи рассматриваемая функция возвращает -L В противном случае она возвращает дескриптор нового гнезда, с помощью которого серверный процесс может взаимодействовать исключрггельно с данным клиентом.