fgets() сокет еще открыт, как вычитать все строки

NightFlash

Новичок
fgets() сокет еще открыт, как вычитать все строки

ситуация, через поп получили что в ящике 2 сообщения, хотим вычитать сначала 1, вывести потом другое и только потом закрыть сокет.
сокет открывался через fsockopen() соотвественно пока он не закрыт feof() будет говорить false и мы не знаем сколько строк надо вычитать, если лишний раз обратится к fgets() а там ничего нет скрипт записает.

Есть ли возможность узнать сколько там строк нас ожидает пока сокет открыт?

Про то "сначала закрой потом читай" прошу не говорить, мне интересна именно эта ситуация. Такое возможно? если да, то какими средствами, если нет, то спасибо за внимание.
 

planarik

Новичок
Непосредственно так не узнать, а средствами протокола POP3 есть команда LIST, она как раз и дает количество строк в сообщении, если мне память не изменяет.
 

NightFlash

Новичок
да черт с ним с pop, будем считать у меня два пхп демона друг с другом общаются. вот один отправил 3 строки.

а как мне узнать что их там аж 3? или таки нельзя?
 

Фанат

oncle terrible
Команда форума
гений.
ты У НАС спрашиваешь, можно ли узнать у ТВОИХ демонов, сколько у них строк?
тебе череп не жмет?
 

NightFlash

Новичок
*****
можно говорить без грубости и сарказма? для начала пойми какой я вопрос задал.

я спросил:
можно ли узнать сколько сейчас строк можно вычитать с помощью fgets() при открытом сокете.
 

Фанат

oncle terrible
Команда форума
огорчает, все-таки, уровень компьютерной грамотности так называемых "пхп-программистов"...
 

NightFlash

Новичок
а по существу можно? не все такие профессионалы, вот уже 4-е сообщение в этой тебе будет абсолютно не содержательным.
 

planarik

Новичок
stream_set_blocking($socket, 0) и fgets() не уснет, если нет данных. Такое решение устроит? По другому никак.
 

fixxxer

К.О.
Партнер клуба
ты не изобретай, а посмотри на протокол http.
есть два способа.
первый (и единственный в http/1.0) - заголовок Content-Length, явно указывающий длину тела в байтах.
второй - chunked transfer encoding - передача тела в виде <длина блока><блок><длина блока><блок><0>.
выбирай на вкус :)
вообще, всегда надо предусматривать в протоколе поле, содержащее длину сообщения. не усложняй себе жизнь:)
 
Сверху