По-человечески прочитать сокет.

Voyager2K

Новичок
По-человечески прочитать сокет.

Например, коннект к smtp серваку маил.ру

PHP:
<?
$con = fsockopen("smtp.mail.ru", 25, $errno, $errstr, 30);
echo 'S: '.fgets($con).'<br>';

$s = "EHLO SOMEUSER\r\n";
fputs($con, $s);
echo 'C: '.$s.'<br>';

while(!feof($con))
	echo 'S: '.fgets($con).'<br>';

/*echo 'S: '.fgets($con).'<br>';
echo 'S: '.fgets($con).'<br>';
echo 'S: '.fgets($con).'<br>';*/
?>
Такой код затыкается т.к. feof() в случае с сокетами ждет таймаута. ;(

если писать:
while($fg = fgets($con))
echo 'S: '.$fg.'<br>';

То же будет застопаривание.

Каким образом можно прочитать построчно ответ сервера, да бы не писать кучу раз fgets (как в комменте кода) ? да еще не известно сколько именно ведь строчек прейдет т.ч. куча fgets'ов не вариант.
 

hermit_refined

Отшельник
Надо по-человечески прочитать не сокет, а ответ сервера, а для этого - прежде документацию по smtp. Даже есть подробное описание на русском.
В ней и написано, как понять - является ли очередная строка ответа на EHLO последней, или же нет.
 

Voyager2K

Новичок
hermit_refined, спасибо.
Не обрати я внимание на, то, что в последней строке ответа сервера после кода идет пробел, а в остальных случаях минус.
 
Сверху