110,538
社区成员
发帖
与我相关
我的任务
分享
public bool ReceiveAsync(SocketAsyncEventArgs e)
{
bool flag;
int num;
SocketError error;
if (s_LoggingEnabled)
{
Logging.Enter(Logging.Sockets, this, "ReceiveAsync", "");
}
if (this.CleanedUp)
{
throw new ObjectDisposedException(base.GetType().FullName);
}
e.StartOperationCommon(this);
e.StartOperationReceive();
this.BindToCompletionPort();
SocketFlags socketFlags = e.m_SocketFlags;
try
{
if (e.m_Buffer != null)
{
error = UnsafeNclNativeMethods.OSSOCK.WSARecv(this.m_Handle, ref e.m_WSABuffer, 1, out num, ref socketFlags, e.m_PtrNativeOverlapped, IntPtr.Zero);
}
else
{
error = UnsafeNclNativeMethods.OSSOCK.WSARecv(this.m_Handle, e.m_WSABufferArray, e.m_WSABufferArray.Length, out num, ref socketFlags, e.m_PtrNativeOverlapped, IntPtr.Zero);
}
}
catch (Exception exception)
{
e.Complete();
throw exception;
}
if (error != SocketError.Success)
{
error = (SocketError) Marshal.GetLastWin32Error();
}
if ((error != SocketError.Success) && (error != SocketError.IOPending))
{
e.FinishOperationSyncFailure(error, num, socketFlags);
flag = false;
}
else
{
flag = true;
}
if (s_LoggingEnabled)
{
Logging.Exit(Logging.Sockets, this, "ReceiveAsync", flag);
}
return flag;
}
private unsafe void CompletionPortCallback(uint errorCode, uint numBytes, NativeOverlapped* nativeOverlapped)
{
SocketFlags none = SocketFlags.None;
SocketError socketError = (SocketError) errorCode;
switch (socketError)
{
case SocketError.Success:
this.FinishOperationSuccess(socketError, (int) numBytes, none);
return;
case SocketError.OperationAborted:
break;
default:
if (this.m_CurrentSocket.CleanedUp)
{
socketError = SocketError.OperationAborted;
}
else
{
try
{
UnsafeNclNativeMethods.OSSOCK.WSAGetOverlappedResult(this.m_CurrentSocket.SafeHandle, (IntPtr) nativeOverlapped, out numBytes, false, out none);
socketError = (SocketError) Marshal.GetLastWin32Error();
}
catch
{
socketError = SocketError.OperationAborted;
}
}
break;
}
this.FinishOperationAsyncFailure(socketError, (int) numBytes, none);
}