|
uIP 1.0
|
Библиотека protosocket-ов предоставляет интерфейс к стеку uIP, который работает похоже на традиционный интерфейс сокетов BSD. Подробнее...
Структуры данных | |
| struct | psock |
| Представление протосокета. Подробнее... | |
Файлы | |
| файл | psock.h |
Заголовочный файл библиотеки протосокетов | |
Макросы | |
| #define | PSOCK_INIT(psock, buffer, buffersize) |
| Инициализирует протосокет. | |
| #define | PSOCK_BEGIN(psock) |
| Запускает в фукнции протопоток протосокета. | |
| #define | PSOCK_SEND(psock, data, datalen) |
| Отправление данных. | |
| #define | PSOCK_SEND_STR(psock, str) |
| Отправляет строку, завершающуюся нулем (null-terminated string). | |
| #define | PSOCK_GENERATOR_SEND(psock, generator, arg) |
| Генерация данных с помощью функции и отправка их | |
| #define | PSOCK_CLOSE(psock) |
| Закрытие протосокета. | |
| #define | PSOCK_READBUF(psock) |
| Чтение данных, пока буфер не заполнится. | |
| #define | PSOCK_READTO(psock, c) |
| Читает данные, пока не попадется указанный символ. | |
| #define | PSOCK_DATALEN(psock) |
| Длина данных, котррые были прочитаны ранее. | |
| #define | PSOCK_EXIT(psock) |
| Выход из протопотока протосокета. | |
| #define | PSOCK_CLOSE_EXIT(psock) |
| Закрывает протосокет и делает выход из протопотока протосокета. | |
| #define | PSOCK_END(psock) |
| Декларирует конец протопотока протосокета. | |
| #define | PSOCK_NEWDATA(psock) |
| Проверяет - поступили ли новые данные на протосокет. | |
| #define | PSOCK_WAIT_UNTIL(psock, condition) |
| Ожидание, пока условие не станет true. | |
Библиотека protosocket-ов предоставляет интерфейс к стеку uIP, который работает похоже на традиционный интерфейс сокетов BSD.
В отличие от программ, написанных для обычного интерфейса uIP, управляемого событиями, программы на protosocket-библиотеке выполнются последовательно и требуют явно реализованных машин состояний.
Protosocket-ы работают только с соединениями TCP.
Protosocket-библиотека использует Библиотека протопотоков (Protothreads) protothread-ы для предоставления последовательного потока выполнения. Это делате protosocket-ы нересурсоемкими в плане расхода памяти, однако подразумевается, что protosocket-ы наследуют фуциональные ограничения protothread-ов. Каждый protosocket живет только в пределах одной функции. Автоматические переменные (хранящиеся в стеке) не сохраняются между вызовами функций protosocket-библиотеки.
Protosocket-библиотека предоставляет функции для отправки данных без разборки с повторными передачами и подтверждениями, как и с функциями для чтения данных с разборкой разбиения данных больше чем через 1 сегмент TCP.
Поскольку каждый протосокет запускается как protothread, то protosocket стартует с вызова PSOCK_BEGIN() в начале функции, в которой используется protosocket. Аналогично, protosocket protothread может быть прерван вызовом PSOCK_EXIT().
| #define PSOCK_BEGIN | ( | psock | ) |
Запускает в фукнции протопоток протосокета.
Этот макрос запускает протопоток, ассоциированный с протосокетом, и он должен быть использован перед тем, как будет вызвана другая фукнция протосокета.
| psock | (struct psock *) Указатель на протосокет, который будет запущен. |
| #define PSOCK_CLOSE | ( | psock | ) |
Закрытие протосокета.
Этот макрос закрывает протосокет, и может быть вызван только из протопотока, в котором живет протосокет.
| psock | (struct psock *) Указатель на протосокет, который будет закрыт. |
| #define PSOCK_CLOSE_EXIT | ( | psock | ) |
| #define PSOCK_DATALEN | ( | psock | ) |
Длина данных, котррые были прочитаны ранее.
Этот макрос возвращает длину данных, которые были прочитаны ранее с использованием PSOCK_READTO() или PSOCK_READ().
| psock | (struct psock *) Указатель на протосокет, содержащий данные. |
| #define PSOCK_END | ( | psock | ) |
Декларирует конец протопотока протосокета.
Этот макрос используется, чтобы декларировать, где находится конец протопотока протосокета. Макрос должен всегда использоваться совместно с соответствующим макросом PSOCK_BEGIN().
| psock | (struct psock *) Указатель на протосокет. |
| #define PSOCK_EXIT | ( | psock | ) |
Выход из протопотока протосокета.
Этот макрос прерывает протопоток протосокета и должен почти всегда использоваться в сочетании с PSOCK_CLOSE().
| psock | (struct psock *) Указатель на протосокет. |
| #define PSOCK_GENERATOR_SEND | ( | psock, | |
| generator, | |||
| arg | |||
| ) |
Генерация данных с помощью функции и отправка их
| psock | Указатель на протосокет. |
| generator | Указатель на функцию генератора. |
| arg | Аргумент для функции генератора. |
Эта функция генерирует данные и посылает их через протосокет. Это может использоваться для динамической генерации данных для передачи, вместо того, чтобы генерировать данные в буфере заранее. Эта функция снижает необходимость в буферной памяти. Функция генератора реализована приложением, и указатель на функцию предоставляется в аргументе, когда делается вызов PSOCK_GENERATOR_SEND().
Функция генератора должна поместить сгенерированные данные напрямую в буфер uip_appdata, и возвратить длину сгенерированных данных. Функция генератора вызывается слоем протосокета, когда данные посылаются первый раз, и каждый раз, когда требуется ретрансмиссия.
| #define PSOCK_INIT | ( | psock, | |
| buffer, | |||
| buffersize | |||
| ) |
Инициализирует протосокет.
Этот макрос инициализирует протосокет, и должен быть вызван перед протосокета. Инициализация таке указывает входной буфер для протосокета.
| psock | (struct psock *) Указатель на протосокет, который будет инициализирован. |
| buffer | (char *) Указатель на входной буфер для протосокета. |
| buffersize | (unsigned int) Размер входного буфера. |
| #define PSOCK_NEWDATA | ( | psock | ) |
Проверяет - поступили ли новые данные на протосокет.
Этот макрос используется совместно с макросом PSOCK_WAIT_UNTIL() для проверки - поступили ли данные на протосокет.
| psock | (struct psock *) Указатель на протосокет. |
| #define PSOCK_READBUF | ( | psock | ) |
Чтение данных, пока буфер не заполнится.
Этот марос будет блокироватьс выполнение протопотока на ожидании данных, и читать данные во входной буфер, указанный вызовом PSOCK_INIT(). Дата читаются, пока буфер не заполнится.
| psock | (struct psock *) Указатель на протосокет, из которого читаются данные. |
| #define PSOCK_READTO | ( | psock, | |
| c | |||
| ) |
Читает данные, пока не попадется указанный символ.
Этот макрос заблокирует выполнение на ожидании нужного символа, и читаемые данные будут попадать во входной буфер, указанный вызовом PSOCK_INIT(). Данные будут читаться в буфер, пока во входом потоке данных не появится указанный символ.
| psock | (struct psock *) Указатель на protosocket с которого должны читаться данные. |
| c | (char) Символ, на котором должно быть остановлено чтение. |
| #define PSOCK_SEND | ( | psock, | |
| data, | |||
| datalen | |||
| ) |
Отправление данных.
Этот макрос посылает данные через протосокет. Протопоток протосокета блокируется, пока все данные не будут отправлены, и не станет известно, что данные приняты на дальнем конце соединения TCP.
| psock | (struct psock *) A pointer to the protosocket over which data is to be sent. |
| data | (char *) Указатель на протосокет, через который будут отправлены данные. |
| datalen | (unsigned int) Длина отправляемых данных. |
| #define PSOCK_SEND_STR | ( | psock, | |
| str | |||
| ) |
Отправляет строку, завершающуюся нулем (null-terminated string).
| psock | Указатель на протосокет. |
| str | Строка для отправки. |
Эта функция посылвает null-terminated строку через протосокет.
| #define PSOCK_WAIT_UNTIL | ( | psock, | |
| condition | |||
| ) |
Ожидание, пока условие не станет true.
Этот макрос блокирует протопоток, пока указанное условие не станет true. Макрос PSOCK_NEWDATA() может использоваться для проверки, поступили ли новые данные, когда протосокет находится в ожидании.
Обычно этот макрос используется так:
PT_THREAD(thread(struct psock *s, struct timer *t)) { PSOCK_BEGIN(s); PSOCK_WAIT_UNTIL(s, PSOCK_NEWADATA(s) || timer_expired(t)); if(PSOCK_NEWDATA(s)) { PSOCK_READTO(s, '\n'); } else { handle_timed_out(s); } PSOCK_END(s); }
| psock | (struct psock *) Указатель на протосокет. |
| condition | Условие, которое ждет блокировка. |
1.7.4