OpenSCADAWiki: Roman Savochenko/C Short All/part2/part22 ...

Home | Index | Changes | Comments | Users | Registration | Login  Password:  
 

2.22 Сокеты

accept (BSD) <sys/types.h, sys/socket.h>
int accept(int s, struct sockaddr *addr, socklen_t *addrlen);
Возвращает описатель сокета клиента пославшего запрос на сокет <s> с адресом <addr, addrlen>.


bind (BSD) <sys/types.h, sys/socket.h>
int bind(int sockfd, struct sockaddr *my_addr, socklen_t addrlen);
Связывает открытый сокет <sockfd> с именем длиной <addrlen> в <my_addr>.


listen (POSIX) <sys/socket.h>
int listen(int s, int backlog);
Прослушивает соединения на сокете <s> с длиной очереди полностью установленных сокетов <backlog>


recv, recvfrom, recvmsg (BSD) <sys/uio.h sys/types.h sys/socket.h>
int recv(int s, void *buf, size_t len, int flags);
int recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlen);
int recvmsg(int s, struct msghdr *msg, int flags);
Системные вызовы recvfrom и recvmsg используются для получения сообщений из сокета независимо от того, является ли сокет ориентированным на соединения или нет. Вызов recv обычно делается только через соединенный сокет.


send, sendto, sendmsg (BSD, POSIX) <sys/types.h, sys/socket.h>
int send(int s, const void *msg, size_t len, int flags);
int sendto(int s, const void *msg, size_t len, int flags, const struct sockaddr *to, socklen_t tolen);
int sendmsg(int s, const struct msghdr *msg, int flags);
send, sendto, и sendmsg используются для пересылки сообщений в другой сокет. send можно использовать, только если сокет находится в состоянии соединения, тогда как sendto и sendmsg можно использовать в любое время.


socket (BSD) <sys/types.h, sys/socket.h>
int socket(int domain, int type, int protocol);
Возвращает описатель нового сокета <socket>. <domain> – задает домен соединения (Табл.18).
<type> – задающий семантику коммуникации (Табл.19).
<protocol> – задает конкретный протокол, который работает с сокетом.


shutdown (BSD) <sys/socket.h>
int shutdown(int s, int how);
Приводит к закрытию всего полнодуплексного соединения или его части в сокете, связанном с описателем <s>.


socketpair (BSD) <sys/types.h, sys/socket.h>
int socketpair(int d, int type, int protocol, int sv[2]);
Функция создает пару неименнованых связанных сокетов в заданном домене <d> типа <type>, используя заданный протокол <protocol>. Описатели заданных сокетов возвращаются в sv[0] и sv[1].


gethostbyname (BSD) <sys/socket.h>
struct hostent *gethostbyname(const char *name);
Возвращает структуру типа hostent машине с именем name.


htonl, htons, ntohl, ntohs (BSD)uint32_t htonl(uint32_t hostlong);
uint16_t htons(uint16_t hostshort);
uint32_t ntohl(uint32_t netlong);
uint16_t ntohs(uint16_t netshort);
Переводят данные из хостового порядка расположения байтов в сетевой и наоборот


inet_pton (BSD) <sys/types.h, sys/socket.h, arpa/inet.h>
int inet_pton(int af, const char *src, void *dst);
Преобразует строку символов <src> в сетевой адрес (типа <af>), затем копирует полученную структуру с адресом в <dst>.


inet_aton (BSD) <sys/socket.h, netinet/in.h, arpa/inet.h>
int inet_aton(const char *cp, struct in_addr *inp);
Преобразует обычный вид IP-адреса cp (из номеров и точек) в двоичный код inp.


inet_addr (BSD) <sys/socket.h, netinet/in.h, arpa/inet.h>
in_addr_t inet_addr(const char *cp);
Преобразует обычный вид IP-адреса cp (из номеров и точек) в двоичный код в сетевом порядке расположения байтов.


inet_network (BSD) <sys/socket.h, netinet/in.h, arpa/inet.h>
in_addr_t inet_network(const char *cp);
Извлекает сетевой номер в хостовом порядке расположения байтов из адреса cp, записанном в виде номеров и точек.


inet_ntoa (BSD) <sys/socket.h, netinet/in.h, arpa/inet.h>
char *inet_ntoa(struct in_addr in);
Преобразует IP-адрес in, заданный в сетевом порядке расположения байтов, в стандартный строчный вид, из номеров и точек.


inet_makeaddr (BSD) <sys/socket.h, netinet/in.h, arpa/inet.h>
struct in_addr inet_makeaddr(int net, int host);
Создает IP-адрес в сетевом порядке расположения байтов, комбинируя номер сети net с локальным адресом host в сети net (оба в хостовом порядке расположения байтов).


inet_lnaof (BSD) <sys/socket.h, netinet/in.h, arpa/inet.h>
in_addr_t inet_lnaof(struct in_addr in);
Возвращает часть адреса для локального хоста из IP-адреса in. Адрес локального хоста возвращается в хостовом порядке размещения байтов.


inet_netof (BSD) <sys/socket.h, netinet/in.h, arpa/inet.h>
in_addr_t inet_netof(struct in_addr in);
Возвращает сетевую часть IP-адреса in. Сетевой номер возвращается в виде байтов, порядок которых определяется системой локального хоста.


Таблица 18. Домены соединений

ИмяОписание
PF_UNIX, PF_LOCALЛокальное соединение.
PF_INETIPv4 протоколы Интернет.
PF_INET6IPv6 протоколы Интернет.
PF_IPXIPX – протоколы Novell.
PF_NETLINKУстройство для взаимодействия с ядром.
PF_X25Протокол ITU-T X.25 / ISO-8208.
PF_AX25Протокол AX.25 – любительское радио.
PF_ATMPVCATM – доступ к низкоуровневым PVC.
PF_APPLETALKAppletalk.
PF_PACKETНизкоуровневый пакетный интерфейс.

Таблица 19. Типы сокетов

ИмяОписание
SOCK_STREAMДвусторонний, надежных последовательных потоков байтов, с поддержкой соединения. Может также поддерживаться механизм внепоточных данных.
SOCK_DGRAMДатаграммы (ненадежные сообщения с ограниченной длиной и не поддерживающие соединения).
SOCK_SEQPACKETПоследовательный двусторонний канал для передачи датаграмм с поддержкой соединений.
SOCK_RAWОбеспечивает доступ к низкоуровневому сетевому протоколу.
SOCK_RDMОбеспечивает надежную доставку датаграмм без гарантии, что они будут расположены по порядку.

 
There are no files on this page.[Display files/form]
Comments [Hide comments/form]