Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2003.06.26;
Скачать: [xml.tar.bz2];

Вниз

WSAEventSelect   Найти похожие ветки 

 
Akni   (2003-04-17 13:49) [0]

Подскажите, в каком модуле описана функция WSAEventSelect? Подключаю winsock – не помогает. WSAAsyncSelect находит, а WSAEventSelect - нет?


 
Digitman   (2003-04-17 14:02) [1]

winsock2.pas

но в станд.поставке Д5 этого модуля нет

const
WINSOCK_VERSION = $0202;
WINSOCK2_DLL = "ws2_32.dll";

interface

function WSAEventSelect( s : TSocket; hEventObject : WSAEVENT; lNetworkEvents : LongInt ): Integer; stdcall;

implementation

function WSAEventSelect; external WINSOCK2_DLL name "WSAEventSelect";

все прочие задействованные декларации/описания есть в станд.хэлпе в Д5

"Winsock2 Programmer"s Reference"



 
Akni   (2003-04-17 16:14) [2]

спасибо


 
Akni   (2003-04-17 16:26) [3]

простите за глупые вопросы, но как быть с hEventObject : WSAEVENT
Можно ли написать hEventObject : THandle?


 
Digitman   (2003-04-17 16:59) [4]

да, можно


 
AlexMax   (2003-04-17 17:34) [5]

Вообщето, по моему, эта функция называется WSASelectEvent, а не WSAEventSelect. Так что попробуй этот вариант и старайся повнимательнее хелп смотреть.


 
Akni   (2003-04-17 18:43) [6]

Пишу след. код:
var hEventObject: THandle;

procedure TISServerThread.ClientExecute;
...
begin
inherited FreeOnTerminate:=true;
fRecSend:=false;
try
Stream:=TWinSocketStream.Create(ClientSocket, 500);

Res:=WSAEventSelect(ClientSocket.Handle, hEventObject, FD_READ or FD_WRITE);

и получаю на этом месте SocketError 10038

Насколько я понимаю, в качестве парамета s : TSocket указывается хендл сокета, который нужно перевести в неблок. режим. Вот я его вроде бы и беру. hEventObject - просто хендл события, которое наступает при возникновении одного из lNetworkEvents.
В чем тогда моя ошибка?

to AlexMax
Функция называется WSAEventSelect и не по-моему, а точно. Поиск в хелпе WSASelectEvent как раз ничего и не дает


 
Digitman   (2003-04-18 08:33) [7]

1.

Res:=WSAEventSelect(ClientSocket. SocketHandle, hEventObject, FD_READ or FD_WRITE);

как инициализируешь hEventObject ? где WSACreateEvent ?

2.

настоятельно не рекомендую использовать класс TWinSocketStream с гнездом , переведенным в неблок.режим для асинхр.нотификаций с использованием AsyncSelect/EventSelect



 
Akni   (2003-04-22 10:33) [8]

настоятельно не рекомендую использовать класс TWinSocketStream с гнездом , переведенным в неблок.режим для асинхр.нотификаций с использованием AsyncSelect/EventSelect

почему? а, точнее, какая тогда альтернатива, что использовать?

У меня такие условия задачи:
1. сервер может посылать данные клиенту при возникновении события на сервере
2. клиент посылает серверу запрос, не всегда требующий ответа со стороны сервера
3. код и сервера, и клиента должен быть реализован в отдельном потоке.

Поэтому хочу создать поток с пом. стандартных блокирующих методов и потом перевести его в неблок. режим.
Буду благодарна за лучшие идеи.



 
Polevi   (2003-04-22 10:58) [9]

не делай кашу из clientsocket и winsock вызовов, используй или чистый api или TClientSocket
в твоем случае тебя вполне устроит T..Socket в асинхронном режиме (использует WSAAsyncSelect)


 
Akni   (2003-04-22 11:16) [10]

т.е. делать отдельный кодовый поток, а в нем создавать TClentSocket / TServerSocket в неблокирующем режиме и использовать стандартные события OnRead, onWrite...
Я правильно поняла идею?


 
Digitman   (2003-04-22 11:37) [11]


> Akni


да, такой вариант ничем не плох
но, конечно же, все зависит от конкретных требований к задаче

механизм асинхр.нотификации с использованием оконных сообщений (неважно, в каком потоке это реализовано) несколько проигрывает по эффективности механизму асинхр.нотификации с использованием объектов синхронизации, но зато программирование работы гнезда в первом случае заметно проще и практически не выходит за рамки обычной обработки VCL-событий (OnRead, OnWrite и т.д.)


 
Akni   (2003-04-22 11:45) [12]

> Digitman
Основные требования к задаче я описала выше. Еще одно условие: эта задача - аналог удаленного администрирования, т.е. на одной стороне в одном приложении может создаваться несколько клиентских потоков, каждый из которых соединятеся со своим сервером; а на другой стороне сервер работает, как правило, только с одним клиентом.

Какой механизм лучше использовать в данном случае?


 
Digitman   (2003-04-22 12:07) [13]

механизм асинхр.нотификации с использованием оконных сообщений (по умолчанию), думаю, вполне сойдет для такой задачи

так что, скорей всего, нет смысла реализовывать иной механизм


 
Polevi   (2003-04-22 14:18) [14]

PS
у механизма асинхр.нотификации с использованием объектов синхронизации есть одна неприятная особенность - ф-ия ожидания может ждать максимум 64 объекта, что не удобно при большом кол-ве клиентов, приходится делать пул потоков


 
Anatoly Podgoretsky   (2003-04-22 14:28) [15]

Win+F и найдешь sconnect.pas

WSAEventSelect(s: TSocket; hEventObject: THandle; lNetworkEvents: Integer): Integer stdcall;

A это объявление из winsock2.pas
WSAEventSelect(s: TSocket; hEventObject: WSAEVENT; lNetworkEvents: LongInt): Integer; stdcall;

Учись пользоваться Windows



Страницы: 1 вся ветка

Форум: "Сети";
Текущий архив: 2003.06.26;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.032 c
7-84779
MortalScorpion
2003-04-16 18:57
2003.06.26
Поиск в реестре


3-84038
korvin
2003-06-01 07:17
2003.06.26
Не дать


3-83940
Alex_x
2003-05-28 11:41
2003.06.26
Вопрос по TField


7-84809
GIMLI
2003-04-16 19:32
2003.06.26
Список дисков


1-84220
dim-
2003-06-11 22:17
2003.06.26
Как сохранить в регистр





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский