void UdpSendThread::Main() { SocketThreadOperation *op = mSocketThreadOperation; UdpSocket *s = (UdpSocket*)op->mSocket; ErrorType error; StopWatch sw; sw.Start(); while (!ShouldEnd()) { error = s->Send(op->mIPAddress, op->mByteStream, Math::ClampLong( op->mTimeoutMS - sw.GetElapsedMilliseconds(), 0L, 16L)); if (0L == op->mTimeoutMS || (error && kErrorTimedOut != error) || (0L < op->mTimeoutMS && sw.GetElapsedMilliseconds() >= op->mTimeoutMS)) { if (error) Error::Throw(error, String("[%s(%p, %p)]", FastFunctionName, this, op)); s->OnSend(op->mID, op->mIPAddress, error); break; } } }
value _UdpSocket_Send(value a, value b, value c) { UdpSocket* s = (UdpSocket*) val_data(a); return alloc_int(s->Send(buffer_data(val_to_buffer(b)), val_int(c))); }