Лекции по курсу "Системное программирование для UNIX". Литвинов Д.Г. - 55 стр.

UptoLike

Составители: 

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