Специфікація BTRON3 (Український переклад) | Специфікація ОС Sakamura BTRON / BTRON3
Повернутися до змісту розділу Графічної оболонки
Попередня сторінка: 3.10 Системний трей та сповіщення (Повернутися)
Менеджер TCP/IP розширює операційну систему BTRON3 функціями мережевого зв'язку за протоколами стека TCP/IP (Transmission Control Protocol / Internet Protocol) у середовищах локальних (LAN) та глобальних (WAN) мереж.
Системний інтерфейс Менеджера TCP/IP побудований на концепції мережевих сокетів (Sockets API). Комунікація виконується через дескриптори сокетів, які відокремлені від дескрипторів звичайних файлів BTRON. Мережевий стек забезпечує міжпроцесний та міжмережевий обмін даними як у межах одного пристрою, так і між вузлами в мережі.
□ Сімейства протоколів та адрес
#define PF_UNSPEC 0 /* Невизначене сімейство протоколів */
#define PF_INET 2 /* Мережевий стек TCP/IP та пов'язані протоколи */
#define AF_UNSPEC 0 /* Невизначене сімейство адрес */
#define AF_INET 2 /* Адреси Інтернет (IPv4) */
□ Типи сокетів
#define SOCK_STREAM 1 /* Потоковий сокет із встановленням з'єднання (TCP) */
#define SOCK_DGRAM 2 /* Датаграмний сокет без з'єднання (UDP) */
#define SOCK_RAW 3 /* Низькорівневий протокольний сокет (Raw IP) */
□ Опції сокетів setsockopt / getsockopt
#define SOL_SOCKET 0xffff /* Опції рівня сокета */
#define IPPROTO_TCP 0x0001 /* Опції рівня TCP */
#define IPPROTO_IP 0x0002 /* Опції рівня IP */
#define SO_DEBUG 0x0001 /* Включити ведення налагоджувального журналу */
#define SO_REUSEADDR 0x0004 /* Дозволити повторне використання локальної адреси */
#define SO_KEEPALIVE 0x0008 /* Підтримувати з'єднання активним (Keep-Alive) */
#define SO_DONTROUTE 0x0010 /* Обходити стандартну маршрутизацію */
#define SO_BROADCAST 0x0020 /* Дозволити відправку широкомовних пакетів */
#define SO_LINGER 0x0080 /* Затримка закриття сокета при наявності даних */
#define SO_OOBINLINE 0x0100 /* Залишати позасмугові дані OOB у загальному потоці */
#define SO_SNDBUF 0x1001 /* Розмір буфера відправки */
#define SO_RCVBUF 0x1002 /* Розмір буфера прийому */
#define SO_ERROR 0x1007 /* Отримати код помилки та очистити */
#define SO_TYPE 0x1008 /* Отримати тип сокета */
#define TCP_MAXSEG 0x2000 /* Максимальний розмір сегмента MSS */
#define TCP_NODELAY 0x2001 /* Відключати алгоритм Нагля для негайної відправки */
#define IP_OPTIONS 0x0001 /* Опції заголовка IP */
□ Структури мережевих адрес
struct sockaddr {
unsigned short sa_family; /* Сімейство адрес AF_INET */
char sa_data[14]; /* Байтний масив адреси */
};
struct in_addr {
unsigned long s_addr; /* 32-бітна мережева IP-адреса (Network Byte Order) */
};
struct sockaddr_in {
short sin_family; /* AF_INET */
unsigned short sin_port; /* Номер порту TCP/UDP */
struct in_addr sin_addr; /* IP-адреса */
char sin_zero[8]; /* Заповнювальні байти */
};
struct iovec {
char *iov_base; /* Базова адреса буфера */
int iov_len; /* Довжина буфера у байтах */
};
struct msghdr {
char *msg_name; /* Адреса призначання/джерела */
int msg_namelen; /* Розмір структури адреси */
struct iovec *msg_iov; /* Масив вектора буферів */
int msg_iovlen; /* Кількість елементів у msg_iov */
char *msg_accrights; /* Права доступу */
int msg_accrightslen;
};
struct hostent {
char *h_name; /* Канонічне ім'я хоста */
char **h_aliases; /* Список псевдонімів хоста */
int h_addrtype; /* Тип адреси (AF_INET) */
int h_length; /* Довжина адреси у байтах (4) */
char **h_addr_list; /* Список мережевих IP-адрес */
#define h_addr h_addr_list[0]
};
struct servent {
char *s_name; /* Канонічна назва служби */
char **s_aliases; /* Псевдоніми служби */
int s_port; /* Номер порту */
char *s_proto; /* Протокол (tcp/udp) */
};
struct linger {
int l_onoff; /* Прапорець включення затримки (0-off, 1-on) */
int l_linger; /* Час затримки у секундах */
};
#define FD_SETSIZE 256
typedef struct fd_set {
int fds_bits[FD_SETSIZE/sizeof(int)];
} fd_set;
struct timeval {
long tv_sec; /* Секунди */
long tv_usec; /* Мікросекунди */
};
#define EX_HOSTUNREACH ((-401) << 16) /* Вузол/хост недосяжний */
#define EX_TIMEDOUT ((-402) << 16) /* Перевищено час очікування TCP/IP */
#define EX_CONNABORTED ((-403) << 16) /* Мережеве з'єднання перервано */
#define EX_NOBUFS ((-404) << 16) /* Переповнення мережевих буферів */
#define EX_BADF ((-405) << 16) /* Недійсний дескриптор сокета */
#define EX_WOULDBLOCK ((-407) << 16) /* Операція заблокує неблокуючий сокет */
#define EX_MSGSIZE ((-408) << 16) /* Розмір повідомлення перевищує ліміт */
#define EX_DESTADDRREQ ((-409) << 16) /* Необхідно вказати адресу призначення */
#define EX_PROTOTYPE ((-410) << 16) /* Некоректний тип протоколу для сокета */
#define EX_NOPROTOOPT ((-411) << 16) /* Непідтримувана опція протоколу */
#define EX_PROTONOSUPPORT ((-412) << 16) /* Протокол не підтримується у системі */
#define EX_SOCKTNOSUPPORT ((-413) << 16) /* Тип сокета не підтримується */
#define EX_OPNOTSUPP ((-414) << 16) /* Операція не підтримується сокетом */
#define EX_PFNOSUPPORT ((-415) << 16) /* Сімейство протоколів не підтримується */
#define EX_AFNOSUPPORT ((-416) << 16) /* Сімейство адрес не підтримується */
#define EX_ADDRINUSE ((-417) << 16) /* Локальна адреса/порт вже використовується */
#define EX_ADDRNOTAVAIL ((-418) << 16) /* Запитана адреса недоступна */
#define EX_NETDOWN ((-419) << 16) /* Мережевий інтерфейс відключений */
#define EX_NETUNREACH ((-420) << 16) /* Мережа недосяжна */
#define EX_NETRESET ((-421) << 16) /* Мережу скинуто віддаленим вузлом */
#define EX_CONNRESET ((-422) << 16) /* З'єднання скинуто віддаленим сокетом */
#define EX_ISCONN ((-423) << 16) /* Сокет вже підключений */
#define EX_NOTCONN ((-424) << 16) /* Сокет не має активного з'єднання */
#define EX_SHUTDOWN ((-425) << 16) /* Передача/прийом заборонені (Shutdown) */
#define EX_CONNREFUSED ((-426) << 16) /* З'єднання відхилено віддаленим хостом */
#define EX_HOSTDOWN ((-427) << 16) /* Віддалений хост вимкнений */
#define EX_ALREADY ((-428) << 16) /* Операція підключення вже виконується */
#define EX_INPROGRESS ((-429) << 16) /* Виконується неблокуюче підключення */
| so_start |
| Start TCP/IP Subsystem |
| Ініціалізація мережевої підсистеми TCP/IP |
|
【Синтаксис / Прототип】
ERR so_start(W arg)
【Параметри】
W arg Аргумент розширення ініціалізації
【Значення, що повертається】
= 0 Успішне виконання
< 0 Помилка (Код помилки)
【Детальний опис】
Ініціалізує комунікаційну підсистему TCP/IP для поточного процесу. Зазвичай викликається автоматично при першому сокетному системному виклику.
| so_finish |
| Finish TCP/IP Subsystem |
| Завершення роботи підсистеми TCP/IP |
|
【Синтаксис / Прототип】
ERR so_finish(W arg)
【Параметри】
W arg Прапор завершення (0 — нормальне завершення)
【Значення, що повертається】
= 0 Успішне виконання
< 0 Помилка (Код помилки)
【Детальний опис】
Завершує роботу мережевого стека для процесу та вивільняє системні мережеві ресурси.
| so_socket |
| Create Socket |
| Створення комунікаційного сокета |
|
【Синтаксис / Прототип】
WERR so_socket(W domain, W type, W protocol)
【Параметри】
W domain Мережевий домен (PF_INET)
W type Тип сокета (SOCK_STREAM, SOCK_DGRAM)
W protocol Специфічний протокол (IPPROTO_TCP, IPPROTO_UDP, ICMP)
【Значення, що повертається】
> 0 Успішне виконання (Дескриптор сокета s)
< 0 Помилка (Код помилки)
【Детальний опис】
Створює новий мережевий сокет у домені domain типу type та повертає його дескриптор s.
【Коди помилок】
EX_NOBUFS : Переповнення системних мережевих буферів.
EX_PROTONOSUPPORT : Непідтримуваний тип або протокол сокета.
| so_bind |
| Bind Socket Name |
| Прив'язка локальної адреси та порту до сокета |
|
【Синтаксис / Прототип】
ERR so_bind(W s, struct sockaddr *nam, W namlen)
【Параметри】
W s Дескриптор сокета
struct sockaddr *nam Вказівник на локальну адресу sockaddr_in
W namlen Довжина структури адреси у байтах
【Значення, що повертається】
= 0 Успішне виконання
< 0 Помилка (Код помилки)
【Детальний опис】
Прив'язує локальну IP-адресу та номер порту nam до сокета s.
【Коди помилок】
EX_ADR : Неприпустима адреса вказівника nam.
EX_BADF : Недійсний дескриптор сокета s.
EX_ADDRINUSE : Запитаний порт вже використовується іншим сокетом.
EX_ADDRNOTAVAIL : Прив'язка до даної адреси недоступна.
| so_listen |
| Listen for Incoming Connections |
| Переведення сокета в режим очікування з'єднань |
|
【Синтаксис / Прототип】
ERR so_listen(W s, W backlog)
【Параметри】
W s Дескриптор потокового сокета SOCK_STREAM
W backlog Максимальна довжина черги очікуючих підключень
【Значення, що повертається】
= 0 Успішне виконання
< 0 Помилка (Код помилки)
【Детальний опис】
Переводить сокет s у стан прослуховування вхідних підключень із розміром черги backlog.
| so_accept |
| Accept Connection |
| Прийняття вхідного мережевого з'єднання |
|
【Синтаксис / Прототип】
WERR so_accept(W s, struct sockaddr *nam, W *namlen)
【Параметри】
W s Дескриптор прослуховуваного сокета
struct sockaddr *nam Буфер для збереження адреси підключеного клієнта (Вихід)
W *namlen Вказівник на розмір буфера адреси
【Значення, що повертається】
> 0 Успішне виконання (Новий дескриптор підключеного сокета)
< 0 Помилка (Код помилки)
【Детальний опис】
Приймає перше вхідне підключення з черги прослуховуваного сокета s, створює новий сокет для з'єднання та повертає його дескриптор.
| so_connect |
| Initiate Connection |
| Встановлення підключення до віддаленого сокета |
|
【Синтаксис / Прототип】
ERR so_connect(W s, struct sockaddr *nam, W namlen)
【Параметри】
W s Дескриптор сокета
struct sockaddr *nam Адреса віддаленого хоста та порту
W namlen Розмір структури адреси
【Значення, що повертається】
= 0 Успішне виконання
< 0 Помилка (Код помилки)
【Детальний опис】
Ініціалізує мережеве з'єднання для сокета s із віддаленим хостом за адресою nam.
| so_send |
| Send Data to Socket |
| Відправка даних через сокет |
|
【Синтаксис / Прототип】
WERR so_send(W s, B *buf, W len, W flags)
【Параметри】
W s Дескриптор підключеного сокета
B *buf Буфер із даними для відправки
W len Довжина даних у байтах
W flags Прапорці передачі (MSG_OOB, MSG_DONTROUTE)
【Значення, що повертається】
>= 0 Успішне виконання (Кількість відправлених байтів)
< 0 Помилка (Код помилки)
【Детальний опис】
Передає len байтів даних із буфера buf через підключений сокет s.
| so_recv |
| Receive Data from Socket |
| Прийом даних із сокета |
|
【Синтаксис / Прототип】
WERR so_recv(W s, B *buf, W len, W flags)
【Параметри】
W s Дескриптор підключеного сокета
B *buf Буфер для збереження отриманих даних (Вихід)
W len Максимальна кількість байтів для прийому
W flags Прапорці прийому (MSG_OOB, MSG_PEEK)
【Значення, що повертається】
>= 0 Успішне виконання (Кількість реально отриманих байтів)
< 0 Помилка (Код помилки)
| so_close |
| Close Socket |
| Закриття сокета |
|
【Синтаксис / Прототип】
ERR so_close(W s)
【Параметри】
W s Дескриптор закриваного сокета
【Значення, що повертається】
= 0 Успішне виконання
< 0 Помилка (Код помилки)
【Детальний опис】
Закриває мережевий сокет s та розриває його мережеве з'єднання.
| so_select |
| Select Synchronous I/O Multiplexing |
| Мультиплексування сокетів за станом читання/запису |
|
【Синтаксис / Прототип】
WERR so_select(W nfds, fd_set *rfds, fd_set *wfds, fd_set *efds, struct timeval *tmout)
【Параметри】
W nfds Максимальний дескриптор плюс 1
fd_set *rfds Маска сокетів для перевірки готовності до читання
fd_set *wfds Маска сокетів для перевірки готовності до запису
fd_set *efds Маска сокетів для перевірки виняткових умов
struct timeval *tmout Таймаут очікування (NULL — нескінченно)
【Значення, що повертається】
> 0 Успішне виконання (Кількість готових сокетів)
= 0 Сплив таймаут
< 0 Помилка (Код помилки)
【Детальний опис】
Виконує синхронне мультиплексування I/O для наборів сокетів rfds, wfds, efds.
| so_gethostbyname |
| Get Host Information by Name |
| Отримання мережевої адреси хоста за іменем DNS |
|
【Синтаксис / Прототип】
ERR so_gethostbyname(B *nam, struct hostent *hp, B *buf)
【Параметри】
B *nam Доменне ім'я хоста (наприклад, "btron.org")
struct hostent *hp Буфер для збереження структури hostent (Вихід)
B *buf Допоміжний робочий буфер розміром HBUFLE
【Значення, що повертається】
= 0 Успішне виконання
< 0 Помилка (Код помилки)
【Детальний опис】
Виконує DNS-розподіл доменного імені nam та повертає мережеві IP-адреси хоста у структуру hp.
【Коди помилок】
EX_HOSTUNREACH : Хост з вказаним іменем не знайдено.
EX_TIMEDOUT : Перевищено час очікування відповіді DNS-сервера.
| so_gethostname |
| Get Local Host Name |
| Отримання імені локального хоста |
|
【Синтаксис / Прототип】
ERR so_gethostname(B *name, W nlen)
【Параметри】
B *name Буфер для збереження імені хоста (Вихід)
W nlen Розмір буфера в байтах
【Значення, що повертається】
= 0 Успішне виконання
< 0 Помилка (Код помилки)
Повернутися до змісту специфікації BTRON3
Попередня сторінка: 3.10 Системний трей та сповіщення (Повернутися)