Интернет магазин китайских планшетных компьютеров



Компьютеры - Сокеты Беркли - Функции

23 января 2011


Оглавление:
1. Сокеты Беркли
2. Интерфейс сокета Беркли
3. Заголовочные файлы
4. Функции
5. Дополнительные параметры для сокетов
6. Передача данных
7. Пример клиента и сервера, использующих TCP
8. Пример клиента и сервера, использующие UDP



socket

socket создает конечную точку соединения и возвращает дескриптор. socket принимает три аргумента:

  • domain, указывающий семейство протоколов создаваемого сокета. Например:
    • PF_INET для сетевого протокола IPv4 или
    • PF_INET6 для IPv6.
    • PF_UNIX для локальных сокетов.
  • type один из:
    • SOCK_STREAM или потоковый сокет)
    • SOCK_DGRAM
    • SOCK_SEQPACKET или
    • SOCK_RAW.
  • protocol определяет используемый транспортный протокол. Самые распространенные — это IPPROTO_TCP, IPPROTO_SCTP, IPPROTO_UDP, IPPROTO_DCCP. Эти протоколы указаны в <netinet/in.h>. Значение «0» может быть использовано для выбора протокола по умолчанию из указанного семейства и типа.

Функция возвращает −1 в случае ошибки. Иначе, она возвращает целое число, представляющее присвоенный дескриптор.

Прототип

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

gethostbyname и gethostbyaddr

Функции gethostbyname и gethostbyaddr возвращают указатель на объект типа struct hostent, описывающий интернет-узел по имени или по адресу, соответственно. Эта структура содержит или информацию, полученную от сервера имен или произвольные поля из строки в /etc/hosts. Если локальный сервер имен не запущен, то эти подпрограммы просматривают /etc/hosts. Функции принимают следующие аргументы:

  • name, определяющий имя хоста. Например: www.wikipedia.org
  • addr, определяющий указатель на struct in_addr, содержащую адрес хоста.
  • len, определяющий длину в байтах addr.
  • type, определяющий тип области адресов хоста. Например: PF_INET

Функции возвращают NULL-указатель в случае ошибки. В этом случае может быть проверена дополнительная целая h_errno для выявления ошибки или неправильного или неизвестного хоста. В противном случае возвращается корректная struct hostent *.

Прототипы

struct hostent *gethostbyname;
struct hostent *gethostbyaddr;

connect

connect Возвращает целое число, представляющее код ошибки: 0 означает успешное выполнение, а −1 свидетельствует об ошибке.

Некоторые типы сокетов работают без установления соединения, это в основном касается UDP-сокетов. Для них соединение приобретает особое значение: цель по умолчанию для посылки и получения данных присваивается переданному адресу, позволяя использовать такие функции как send и recv на сокетах без установления соединения.

Загруженный сервер может отвергнуть попытку соединения, поэтому в некоторых видах программ необходимо предусмотреть повторные попытки соединения.

Прототип

#include <sys/types.h>
#include <sys/socket.h>
int connect;

bind

bind связывает сокет с конкретным адресом. Когда сокет создается при помощи socket, он ассоциируется с некоторым семейством адресов, но не с конкретным адресом. До того как сокет сможет принять входящие соединения, он должен быть связан с адресом. bind принимает три аргумента:

  • sockfd — дескриптор, представляющий сокет при привязке
  • serv_addr — указатель на структуру sockaddr, представляющую адрес, к которому привязываем.
  • addrlen — поле socklen_t, представляющее длину структуры sockaddr.

Возвращает 0 при успехе и −1 при возникновении ошибки.

Прототип

#include <sys/types.h>
#include <sys/socket.h>
int bind;

listen

listen подготавливает привязываемый сокет к принятию входящих соединений. Данная функция применима только к типам сокетов SOCK_STREAM и SOCK_SEQPACKET. Принимает два аргумента:

  • sockfd — корректный дескриптор сокета.
  • backlog — целое число, означающее число установленных соединений, которые могут быть обработаны в любой момент времени. Операционная система обычно ставит его равным максимальному значению.

После принятия соединения оно выводится из очереди. В случае успеха возвращается 0, в случае возникновения ошибки возвращается −1.

Прототип

#include <sys/socket.h>
int listen;

accept

accept используется для принятия запроса на установление соединения от удаленного хоста. Принимает следующие аргументы:

  • sockfd — дескриптор слушающего сокета на принятие соединения.
  • cliaddr — указатель на структуру sockaddr, для принятия информации об адресе клиента.
  • addrlen — указатель на socklen_t, определяющее размер структуры, содержащей клиентский адрес и переданной в accept. Когда accept возвращает некоторое значение, socklen_t указывает сколько байт структуры cliaddr использовано в данный момент.

Функция возвращает дескриптор сокета, связанный с принятым соединением, или −1 в случае возникновения ошибки.

Прототип

#include <sys/types.h>
#include <sys/socket.h>
int accept;


Просмотров: 8625


<<< Расширение X video
Список Java API >>>