
06.03.2010, 19:59
|
|
Постоянный
Регистрация: 13.12.2008
Сообщений: 354
Провел на форуме: 1747641
Репутация:
175
|
|
Сообщение от #Specan
Уважаемый slesh, я вижу вы неплохой специалист в области сетевого программирования.
Если знаете, подскажите пожалуйста такой вопрос:
В PHP сокеты можно сравнить с файлами и там есть такая замечательная функция feof, которая возвращает true если все данные считаны и соответственно false если нет.
Есть ли аналог подобной функции в Delphi.
Теперь зачем мне это:
Дело в том, что я создаю небольшой TCP клиент, и я хочу не разрывать соединение.
Вот мне как раз и нужно знать получил ли я все данные или нет.
Если тупо использовать recv и ждать, когда она вернёт 0 - это не вариант.
Она просто тупо зависнет если я её вызову после приёма всех данных.
Вот мне и нужнол решение.
Подскажите, если знаете.
Заранее спасибо.
#Specan, немного неправильно.
Если подключение, открытое при помощи fsockopen() не было закрыто сервером, feof() будет ждать достижения таймаута прежде чем вернуть TRUE. Время таймаута по умолчанию равно 60 секундам. Вы можете использовать stream_set_timeout() для того, чтобы изменить это значение.
То есть сервак должен закрыть соединение, что бы данная функция возвратила True.
Сообщение от #Specan
Дело в том, что я создаю небольшой TCP клиент, и я хочу не разрывать соединение.
Лично я думаю, что вы должны использовать какие то особенности своего внутреннего протокола. Например, при получении определенных данных перестать читать из сокета.
Хотя я точно не уверен насчет всего этого, поэтому если что, пусть slesh ответит. Он укажет более правильный вариант.
|
|
|