![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Можно ли перевести сокет из блокирующего в неблокирующий режим? [D4, D5, NT4, Win2k, WinXP]
Repeater © (2002-11-01 12:46:00)Привет!
Такая трабла. Надо бы перевести сокет из блокирующего режима в неблокирующий. Если конкретнее то мне надо сделать такое. Допустим ко мне обращается клиент на серверный сокет. Я в свою очередь создаю блокирующий клиентский сокет и соединяюсь с удаленным сервером. После этого происходит небольшой диалог с удаленным сервером. Диалог состоит в том что я посылаю команды и жду пока сервер ответит. Потом снова посылаю команды и мнова жду ответа. Все это время серверный сокет должен ждать окончания этого диалога, а как только он закончится надо перевести клиентский сокет в неблокирующий режим. Можно такое сделать? Если можно то как?
Repeater (2002-11-01 16:43:00) [41]Ну напрямую нельзя указать TClientSocket.ClientType:=ctNonBlockin. Это вызывает ошибку. А если сделать так как ты сказал, то компонент не будет знать, что тип его сокета поменялся и не назначит соответствующие обработчики сообщений. Тогда уж лучше вообще компоненты не использовать а писать все на АПИ.
Digitman (2002-11-01 16:17:00) [42]Почему нельзя ? Можно.
Хэндл созданного гнезда всегда доступен чтением соотв.св-ва TCustomWinSocket.SocketHandle. А это как раз то, что требуется одним из обязательных параметров указанных ф-ций.
Repeater (2002-11-01 16:03:00) [43]Интересно, а почему тогда в Делфе в ее стандартной компоненте TClientSocket нельзя этого сделать? Они ее до конца не доделали или как?
Digitman (2002-11-01 13:50:00) [44]можно. на то и ф-ции эти существуют
Repeater (2002-11-01 13:42:00) [45]А что можно уже законекченый сокет перевести из одного состояния в другое не разрывая соединения?
Digitman (2002-11-01 12:49:00) [46]см. WSAAsyncSelect(), WSAEventSelect()