internal void FinishOperationSyncFailure(SocketError socketError, int bytesTransferred, SocketFlags flags) { SetResults(socketError, bytesTransferred, flags); // This will be null if we're doing a static ConnectAsync to a DnsEndPoint with AddressFamily.Unspecified; // the attempt socket will be closed anyways, so not updating the state is OK. _currentSocket?.UpdateStatusAfterSocketError(socketError); Complete(); }
internal void FinishOperationSyncSuccess(int bytesTransferred, SocketFlags flags) { SetResults(SocketError.Success, bytesTransferred, flags); if (NetEventSource.IsEnabled) { LogBytesTransferred(bytesTransferred, _completedOperation); } SocketError socketError = SocketError.Success; switch (_completedOperation) { case SocketAsyncOperation.Accept: // Get the endpoint. Internals.SocketAddress remoteSocketAddress = IPEndPointExtensions.Serialize(_currentSocket._rightEndPoint); socketError = FinishOperationAccept(remoteSocketAddress); if (socketError == SocketError.Success) { _acceptSocket = _currentSocket.UpdateAcceptSocket(_acceptSocket, _currentSocket._rightEndPoint.Create(remoteSocketAddress)); if (NetEventSource.IsEnabled) { NetEventSource.Accepted(_acceptSocket, _acceptSocket.RemoteEndPoint, _acceptSocket.LocalEndPoint); } } else { SetResults(socketError, bytesTransferred, flags); _acceptSocket = null; _currentSocket.UpdateStatusAfterSocketError(socketError); } break; case SocketAsyncOperation.Connect: socketError = FinishOperationConnect(); if (socketError == SocketError.Success) { if (NetEventSource.IsEnabled) { NetEventSource.Connected(_currentSocket, _currentSocket.LocalEndPoint, _currentSocket.RemoteEndPoint); } // Mark socket connected. _currentSocket.SetToConnected(); _connectSocket = _currentSocket; } else { SetResults(socketError, bytesTransferred, flags); _currentSocket.UpdateStatusAfterSocketError(socketError); } break; case SocketAsyncOperation.Disconnect: _currentSocket.SetToDisconnected(); _currentSocket._remoteEndPoint = null; break; case SocketAsyncOperation.ReceiveFrom: // Deal with incoming address. _socketAddress.InternalSize = GetSocketAddressSize(); Internals.SocketAddress socketAddressOriginal = IPEndPointExtensions.Serialize(_remoteEndPoint); if (!socketAddressOriginal.Equals(_socketAddress)) { try { _remoteEndPoint = _remoteEndPoint.Create(_socketAddress); } catch { } } break; case SocketAsyncOperation.ReceiveMessageFrom: // Deal with incoming address. _socketAddress.InternalSize = GetSocketAddressSize(); socketAddressOriginal = IPEndPointExtensions.Serialize(_remoteEndPoint); if (!socketAddressOriginal.Equals(_socketAddress)) { try { _remoteEndPoint = _remoteEndPoint.Create(_socketAddress); } catch { } } FinishOperationReceiveMessageFrom(); break; case SocketAsyncOperation.SendPackets: FinishOperationSendPackets(); break; } Complete(); }