Синхронные(Nonblock) сокеты vs Асинхронные
- From
- Kirill Neznamov (2:5025/32.88)
- To
- ALL
- Date
- 2002-12-08T22:40:20Z
- Area
- SU.WINDOWS.NT.PROG
====================<Crosspost Summary>==========================
* Crossposted by Kirill Neznamov (2:5025/32.88)
* Origin Area: SU.NET.PROG ()
* Original mail was from Kirill Neznamov (2:5025/32.88)
* With: FIPS/32 W95/NT v1.0r
====================<Begin Crosspost: >==========================
Boom Shankar ALL!
Все сказанное относится к win32 и Winsock версии 2.2.
Пишу я тут очередную сетевую прогу и задолбало меня уже каждый раз код модифицировать под конкретную задачу. Поэтому мне необходимо абстрагироваться от конкретной задачи - иными словами любое приложение использующее протокол выше TCP должно работать (TCP,HTTP,etc..) Есть у меня класс CTcpAsyncClientSocket который реализует работу с асинхронными сокетами.
Есть класс который его наследует:
class CTcpAsyncApp : public CTcpAsyncClientSocket
{
};
Как мне передавать сообщения FD_READ,FD_WRITE,etc.. CTcpAsyncApp?
Есть у меня несколько соображений но мне кажется что они все тупиковые и
вся прелесть асинхронных сокетов теряется. Каков смысл асинхронных сокетов?
Cмысл простой - система сообщает приложению о том когда можно читать данные когда можно посылать, etc... вообщем короче смысл заключен в том что приложение
не тратит ресурс процессора на опрос состояния сокета. Как реализовать это
на чистом си я себе представляю. А вот как на c++? Есть у меня такая идея но без наследования когда создается экземпляр CTcpAsyncClientSocket после подключения
к серверу запускается нитка которая обрабатывает FD_READ | FD_WRITE | FD_CLOSE.
(используются функции WSAEventSelect и WSAWaitForMultipleEvents). При FD_READ
она записывает данные из сокета во внутренний буффер при FD_WRITE пишет данные из внутреннего буфера если он не пуст. Другая пользовательская нитка время от времени также пишет во внутренний буффер CTCPAsyncClientSocket или читает оттуда. Но тогда вся суть асинхронных сокетов теряется и кроме того надо синхронизировать нитки. :(
Вообщем как мне реализовать класс для работы с асинхронными сокетами чтобы
другой класс который его унаследует сам каждый раз получал FD_READ | FD_WRITE | FD_CLOSE и сам определял поведение на эти события?
WBR,
KiR
--- F.I.P.S./32 v1.0r W95/NT [M]
* Origin: Придумай его сам. (2:5025/32.88)