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

NightFlash

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

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

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

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

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

я спросил:
можно ли узнать сколько сейчас строк можно вычитать с помощью fgets() при открытом сокете.
 
огорчает, все-таки, уровень компьютерной грамотности так называемых "пхп-программистов"...
 
а по существу можно? не все такие профессионалы, вот уже 4-е сообщение в этой тебе будет абсолютно не содержательным.
 
stream_set_blocking($socket, 0) и fgets() не уснет, если нет данных. Такое решение устроит? По другому никак.
 
ты не изобретай, а посмотри на протокол http.
есть два способа.
первый (и единственный в http/1.0) - заголовок Content-Length, явно указывающий длину тела в байтах.
второй - chunked transfer encoding - передача тела в виде <длина блока><блок><длина блока><блок><0>.
выбирай на вкус :)
вообще, всегда надо предусматривать в протоколе поле, содержащее длину сообщения. не усложняй себе жизнь:)
 
Сверху