コード例 #1
0
ファイル: socket.cs プロジェクト: svermeulen/iris
        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);
            }
        }
コード例 #2
0
 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);
     }
 }