@@ -721,6 +721,7 @@ public static bool TryCompleteSendTo(SafeCloseSocket socket, IList<ArraySegment<
721721
722722 public static bool TryCompleteSendTo ( SafeCloseSocket socket , byte [ ] buffer , IList < ArraySegment < byte > > buffers , ref int bufferIndex , ref int offset , ref int count , SocketFlags flags , byte [ ] socketAddress , int socketAddressLen , ref int bytesSent , out SocketError errorCode )
723723 {
724+ bool successfulSend = false ;
724725 for ( ; ; )
725726 {
726727 int sent ;
@@ -745,16 +746,17 @@ public static bool TryCompleteSendTo(SafeCloseSocket socket, byte[] buffer, ILis
745746
746747 if ( sent == - 1 )
747748 {
748- if ( errno != Interop . Error . EAGAIN && errno != Interop . Error . EWOULDBLOCK )
749+ if ( ! successfulSend && errno != Interop . Error . EAGAIN && errno != Interop . Error . EWOULDBLOCK )
749750 {
750751 errorCode = GetSocketErrorForErrorCode ( errno ) ;
751752 return true ;
752753 }
753754
754- errorCode = SocketError . Success ;
755+ errorCode = successfulSend ? SocketError . Success : SocketError . WouldBlock ;
755756 return false ;
756757 }
757758
759+ successfulSend = true ;
758760 bytesSent += sent ;
759761
760762 bool isComplete = sent == 0 ||
@@ -902,8 +904,8 @@ public static SocketError Send(SafeCloseSocket handle, IList<ArraySegment<byte>>
902904 int bufferIndex = 0 ;
903905 int offset = 0 ;
904906 SocketError errorCode ;
905- bool completed = TryCompleteSendTo ( handle , bufferList , ref bufferIndex , ref offset , socketFlags , null , 0 , ref bytesTransferred , out errorCode ) ;
906- return completed ? errorCode : SocketError . WouldBlock ;
907+ TryCompleteSendTo ( handle , bufferList , ref bufferIndex , ref offset , socketFlags , null , 0 , ref bytesTransferred , out errorCode ) ;
908+ return errorCode ;
907909 }
908910
909911 public static SocketError Send ( SafeCloseSocket handle , byte [ ] buffer , int offset , int count , SocketFlags socketFlags , out int bytesTransferred )
@@ -915,8 +917,8 @@ public static SocketError Send(SafeCloseSocket handle, byte[] buffer, int offset
915917
916918 bytesTransferred = 0 ;
917919 SocketError errorCode ;
918- bool completed = TryCompleteSendTo ( handle , buffer , ref offset , ref count , socketFlags , null , 0 , ref bytesTransferred , out errorCode ) ;
919- return completed ? errorCode : SocketError . WouldBlock ;
920+ TryCompleteSendTo ( handle , buffer , ref offset , ref count , socketFlags , null , 0 , ref bytesTransferred , out errorCode ) ;
921+ return errorCode ;
920922 }
921923
922924 public static SocketError SendFile ( SafeCloseSocket handle , FileStream fileStream )
@@ -947,8 +949,8 @@ public static SocketError SendTo(SafeCloseSocket handle, byte[] buffer, int offs
947949
948950 bytesTransferred = 0 ;
949951 SocketError errorCode ;
950- bool completed = TryCompleteSendTo ( handle , buffer , ref offset , ref count , socketFlags , socketAddress , socketAddressLen , ref bytesTransferred , out errorCode ) ;
951- return completed ? errorCode : SocketError . WouldBlock ;
952+ TryCompleteSendTo ( handle , buffer , ref offset , ref count , socketFlags , socketAddress , socketAddressLen , ref bytesTransferred , out errorCode ) ;
953+ return errorCode ;
952954 }
953955
954956 public static SocketError Receive ( SafeCloseSocket handle , IList < ArraySegment < byte > > buffers , ref SocketFlags socketFlags , out int bytesTransferred )
0 commit comments