public int Send(byte[] buffer, int offset, int size, SocketFlags socketFlags, out SocketError error)
{
int sent = 0;
while (true)
{
sent += m_socket.Send(buffer, offset + sent, size - sent, socketFlags, out error);
if (error == SocketError.WouldBlock)
{
error = SocketError.Success;
}
if (error != SocketError.Success)
{
return(sent);
}
if (sent < size)
{
m_writeCS.Enter();
m_writingThread = MicroThread.CurrentThread;
m_writingThread.Wait();
m_writingThread = null;
m_writeCS.Exit();
}
else
{
return(sent);
}
}
}