![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Таймаут у ClientSocket. [D5, Win2k]
yaJohn © (2002-03-22 17:12:00)У меня есть ClientSocket. Пытаюсь установить связь с сервером. Где и как я могу получить/установить время таймаута? Или надо вручную, по таймеру? Тогда как корректно сказать еще не соединившемуся сокету, что соединение более не требуется?
Аналогичный вопрос - при передаче данных. Т.е. "если данных не было 3 сек то рвем соединение".
Заранее спасибо!
Digitman (2002-03-22 17:58:00) [1]>yaJohn
Это прихоть разработчиков VCL-класса TClientSocket, которые физически создают гнездо именно в контексте метода TClientSocket.Open (или Active:= True, без разницы). А до того, как гнездо создано, устанавливать его опции на уровне WinsockAPi- это нонсенс. Т.е., не изменив реализации класса TClientSocket, изменить ситуацию невозможно.
Насчет
>>Active:=true, но до OnConnect или OnError.
>>Active:=false - это коректно?
думаю, что - да. Хотя здесь есть некоторые "подводные" камни.
yaJohn (2002-03-22 17:47:00) [2]>Время тайм-аута коннекта, к сожалению - никак
Неутешительно... Это прихоть дельфи или операционки? Может сырцы ВЦЛ подрихтовать? %)
И позволю себе позанудствовать... Как закрыть неоткрытый сокет. Т.е. после Active:=true, но до OnConnect или OnError.
Active:=false - это коректно?
Digitman (2002-03-22 17:39:00) [3]Время тайм-аута коннекта, к сожалению - никак. Время тайм-аута i/o-операций клиентского гнезда, в принципе, можно изменить, получив после успешного коннекта значение хэндла созданного кл.гнезда и прямо обратившись к опциям гнезда через WinsockAPI.
см. setsockopt()