Предназначение системного вызова connect(). 
";


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

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



Прототип функции connect выглядит так:

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

int connect (Int sid, struct sockaddr* addr p, int len);

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

Аргумент sid представляет собой дескригггор гнезда, возвращенный функцией socket. В BSD 4.2 и 4.3 имя гнезда, указанное аргументом sid, совпадает с именем используемого транспортного протокола. В System V.4 имя гнезду присваивается транспортным протоколом.

Аргумент addr р - это указатель на адрес объекта типа struct sockaddr, хранящего имя серверного гнезда, с которым должно быть установлено соединение. Фактически структура этого объекта зависит от домена, на основе которого создается гнездо. Возможный формат - struct sockaddr (для домена UNIX) или struct sockaddrjn (для домена Internet).

Аргумент len задает размер объекта (в байтах), на который указывает аргумент addr j).

Если sid обозначает потоковое гнездо, то между клиентским и серверным гнездами устанавливается соединение с использованием виртуального канала.

Потоковое гнездо клиента может соединяться с гнездом сервера только один раз. Если sid обозначает дейтаграммное гнездо, то для всех последующа вызовов функции send, осуществляемых через это гнездо, устанавливается адрес по умолчанию. Дейтаграммное гнездо может соединяться с гнездом сервера многократно, изменяя установленные по умолчанию адреса. Путем соединения с гнездом, имеющим NULL-адрес, дейтаграммные гнезда могут разорвать соединение.

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

Предназначение системных вызовов send() и sendto().

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

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

int send (int sid, const char* buf, int len, int flag);

Эта функция передает содержащееся в аргументе buf сообщение длиной Men байтов в гнездо, заданное аргументом sid и соединенное с данным гнездом.

Аргументу flag обычно присваивается значение О, но он может иметь и значение MSG OOB. В этом случае сообщение, содержащееся в buf должно бьггь передано как высокоприоррггетное (out-of-band message).

Через гнезда можно передавать сообщения двух типов: обычные и высокоприоритетные. По умолчанию все сообщения, передаваемые гнездом, являются обычными, если явно не указано, что они высокоприоритетные. Если из гнезда передается более одного сообщения одного типа, другое гнездо принимает их по алгоррггму FIFO. Гнездо-получатель может выбрать тип сообщений, которые оно хотело бы получать. Сообщения с высоким приоррггетом следует использовать только в экстренных случаях.

Если процесс пользуется гнездом с установлением соединения или гнездом без установления соединения, для которого указан адрес получателя по умолчанию (посредством вызова функции connect), он может передавать обычные сообщения с помощью либо API send, либо API write. При этом функции send и sendto можно использовать для передачи сообщений нулевой длины, а write - нельзя. Кроме того, в BSD 4.2 и 4.3 функция write при обращении к гнезду, соединение с которым не установлено, дает сбой. В System V.4 такой вызов вроде бы выполняется успещно, но никакие данные не передаются.

В случае неудачи эта функция возвращает -1; в случае успешного выполнения возвращается число переданных байтов данных.

Функция sendto

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

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

int sendto (int sid, const char* buf, int len, int flag,

struct soclcaddr* addr p, int* len p);

Эта функция делает то же самое, что и API send, только вызывающий процесс указывает также адрес гнезда-получателя (в аргументах addr р И 1еп р).

Аргументы sid, buf, len и flag - те же самые, что в API send. Аргумент addr p - это указатель на объект, который содержит имя гнезда-получателя. Аргумент len р содержит число байтов в объекте, на который указывает аргумент addr р.

В случае неудачи данная функция возвращает -1; в случае успещного выполнения возвращается число переданных байтов данных.



Поделиться:


Последнее изменение этой страницы: 2017-02-06; просмотров: 92; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.224.73.125 (0.003 с.)