ВУЗ:
Составители:
55
EBADF SOCKET не является дескриптором файла;
EINTR операция была прервана каким-либо сигналом до начала
передачи данных;
ENOTSOCK SOCKET не является гнездом;
EMSGSIZE тип гнезда требует, чтобы данные передавались побайтно, а
размер переданных данных превышает допустимый размер;
EWOULDBLOCK для гнезда задан неблокируемый режим и операция записи будет
заблокирована;
ENOBUFS недостаточен размер внутреннего буферного пространства;
ENOTCONN не установлено соединение с гнездом;
EPIPE Соединение было установлено, но в настоящий момент
нарушено. В этом случае функция генерирует сигнал SIGPIPE.
Однако, если этот сигнал игнорируется или заблокирован,
функция завершается с кодом ошибки EPIPE.
int recv (int SOCKET, void *BUFFER, size_t SIZE, int FLAGS)
Функция recv идентична функции read, однако позволяет задать
дополнительные параметры передачи в аргументе FLAGS. Если гнездо находится в
неблокируемом режиме и отсутствуют данные для чтения, функция завершается с
ошибкой, иначе ожидается поступление данных.
Функция возвращает количество считанных байтов или -1 в случае ошибки.
Переменная errno может принимать следующие значения:
EBADF SOCKET не является дескриптором файла;
ENOTSOCK SOCKET не является гнездом;
EWOULDBLOCK гнездо находится в неблокируемом режиме и операция чтения
будет заблокирована;
EINTR операция была прервана сигналом до того, как были считаны
какие-либо данные;
ENOTCONN соединение с гнездом не установлено.
Параметры передачи данных
Аргумент FLAGS функций recv и send является битовой маской и может быть
комбинацией следующих значений:
int MSG_OOB передача или получение экстренных данных;
int MSG_PEEK данные читаются или посылаются программой, но не
удаляются из очереди; может использоваться только с
функциями чтения;
int MSG_DONTROUTE не включать в сообщение информацию о маршруте;
используется только с функция посылки данных.
Приведем пример использования гнезда, передающего байтовый поток данных.
Пример клиента:
#include <stdio.h>
#include <errno.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#define PORT 5555
#define MESSAGE "Yow!!! Are we having fun yet?!?"
#define SERVERHOST "mescaline.gnu.org"
EBADF SOCKET не является дескриптором файла; EINTR операция была прервана каким-либо сигналом до начала передачи данных; ENOTSOCK SOCKET не является гнездом; EMSGSIZE тип гнезда требует, чтобы данные передавались побайтно, а размер переданных данных превышает допустимый размер; EWOULDBLOCK для гнезда задан неблокируемый режим и операция записи будет заблокирована; ENOBUFS недостаточен размер внутреннего буферного пространства; ENOTCONN не установлено соединение с гнездом; EPIPE Соединение было установлено, но в настоящий момент нарушено. В этом случае функция генерирует сигнал SIGPIPE. Однако, если этот сигнал игнорируется или заблокирован, функция завершается с кодом ошибки EPIPE. int recv (int SOCKET, void *BUFFER, size_t SIZE, int FLAGS) Функция recv идентична функции read, однако позволяет задать дополнительные параметры передачи в аргументе FLAGS. Если гнездо находится в неблокируемом режиме и отсутствуют данные для чтения, функция завершается с ошибкой, иначе ожидается поступление данных. Функция возвращает количество считанных байтов или -1 в случае ошибки. Переменная errno может принимать следующие значения: EBADF SOCKET не является дескриптором файла; ENOTSOCK SOCKET не является гнездом; EWOULDBLOCK гнездо находится в неблокируемом режиме и операция чтения будет заблокирована; EINTR операция была прервана сигналом до того, как были считаны какие-либо данные; ENOTCONN соединение с гнездом не установлено. Параметры передачи данных Аргумент FLAGS функций recv и send является битовой маской и может быть комбинацией следующих значений: int MSG_OOB передача или получение экстренных данных; int MSG_PEEK данные читаются или посылаются программой, но не удаляются из очереди; может использоваться только с функциями чтения; int MSG_DONTROUTE не включать в сообщение информацию о маршруте; используется только с функция посылки данных. Приведем пример использования гнезда, передающего байтовый поток данных. Пример клиента: #include#include #include #include #include #include #include #include #define PORT 5555 #define MESSAGE "Yow!!! Are we having fun yet?!?" #define SERVERHOST "mescaline.gnu.org" 55
Страницы
- « первая
- ‹ предыдущая
- …
- 53
- 54
- 55
- 56
- 57
- …
- следующая ›
- последняя »