private string Receive()
{
const int bufferLength=1024;
byte[] buffer=new byte[bufferLength+1]; // extra char for null terminator
StringBuilder message=new StringBuilder(bufferLength);
int bytesRead;
for(;;)
{
if (EndsWith(message,"\r\n.\r\n")==true)
{
//this is rather the end wait short
if (socket.Poll(100, SelectMode.SelectRead)==false)
break;//no data in socket
}
else
{
//it dosn't look like the end wait longer 5s
if (socket.Poll(5000000, SelectMode.SelectRead)==false)
break;//no data in socket
}
bytesRead=socket.Receive(buffer, bufferLength, 0);
if (bytesRead==0)
break;
// add null terminator
buffer[bytesRead]=0;
//load with some 8bit coding to allow charset changing
message.Append(Encoding.Default.GetChars(buffer, 0, bytesRead));
}
message.Replace("\n..","\n.");
string tmp=message.ToString();
if(tmp.StartsWith(POS_STAT_IND)==false)
throw new Exception("Received negative response from POP3 server");
return tmp;
}