private static void DoDownLevelSendFileCallback(IAsyncResult result, DownLevelSendFileAsyncResult context) { try { while (true) { if (!context.writing) { int read = context.fileStream.EndRead(result); if (read > 0) { context.writing = true; result = context.socket.BeginSend(context.buffer, 0, read, SocketFlags.None, new AsyncCallback(DownLevelSendFileCallback), context); if (!result.CompletedSynchronously) break; } else { DownLevelSendFileCleanup(context.fileStream); context.InvokeCallback(); break; } } else { int written = context.socket.EndSend(result); context.writing = false; result = context.fileStream.BeginRead(context.buffer, 0, context.buffer.Length, new AsyncCallback(DownLevelSendFileCallback), context); if (!result.CompletedSynchronously) break; } } } catch (Exception exception) { if (NclUtilities.IsFatal(exception)) throw; DownLevelSendFileCleanup(context.fileStream); context.InvokeCallback(exception); } }
private static void DoDownLevelSendFileCallback(IAsyncResult result, DownLevelSendFileAsyncResult context) { try { Label_0000: if (!context.writing) { int size = context.fileStream.EndRead(result); if (size > 0) { context.writing = true; result = context.socket.BeginSend(context.buffer, 0, size, SocketFlags.None, new AsyncCallback(Socket.DownLevelSendFileCallback), context); if (result.CompletedSynchronously) { goto Label_0000; } } else { DownLevelSendFileCleanup(context.fileStream); context.InvokeCallback(); } } else { context.socket.EndSend(result); context.writing = false; result = context.fileStream.BeginRead(context.buffer, 0, context.buffer.Length, new AsyncCallback(Socket.DownLevelSendFileCallback), context); if (result.CompletedSynchronously) { goto Label_0000; } } } catch (Exception exception) { if (NclUtilities.IsFatal(exception)) { throw; } DownLevelSendFileCleanup(context.fileStream); context.InvokeCallback(exception); } }