Browse Source

Close connection in the caller if exception is caught

Signed-off-by: Syrone Wong <wong.syrone@gmail.com>
tags/3.3.2
Syrone Wong 8 years ago
parent
commit
a0fd003099
1 changed files with 6 additions and 10 deletions
  1. +6
    -10
      shadowsocks-csharp/Controller/Service/TCPRelay.cs

+ 6
- 10
shadowsocks-csharp/Controller/Service/TCPRelay.cs View File

@@ -259,7 +259,7 @@ namespace Shadowsocks.Controller
response = new byte[] { 0, 91 }; response = new byte[] { 0, 91 };
Logging.Error("socks 5 protocol error"); Logging.Error("socks 5 protocol error");
} }
_connection?.BeginSend(response, 0, response.Length, SocketFlags.None, new AsyncCallback(HandshakeSendCallback), null);
_connection.BeginSend(response, 0, response.Length, SocketFlags.None, new AsyncCallback(HandshakeSendCallback), null);
} }
else else
Close(); Close();
@@ -378,7 +378,7 @@ namespace Shadowsocks.Controller
{ {
try try
{ {
_connection?.EndSend(ar);
_connection.EndSend(ar);
StartConnect(); StartConnect();
} }
catch (Exception e) catch (Exception e)
@@ -583,7 +583,7 @@ namespace Shadowsocks.Controller
var remote = session.Remote; var remote = session.Remote;
// Complete the connection. // Complete the connection.
remote?.EndConnectDest(ar);
remote.EndConnectDest(ar);
_destConnected = true; _destConnected = true;
@@ -621,7 +621,7 @@ namespace Shadowsocks.Controller
{ {
_startReceivingTime = DateTime.Now; _startReceivingTime = DateTime.Now;
session.Remote.BeginReceive(_remoteRecvBuffer, 0, RecvSize, SocketFlags.None, new AsyncCallback(PipeRemoteReceiveCallback), session); session.Remote.BeginReceive(_remoteRecvBuffer, 0, RecvSize, SocketFlags.None, new AsyncCallback(PipeRemoteReceiveCallback), session);
_connection?.BeginReceive(_connetionRecvBuffer, 0, RecvSize, SocketFlags.None, new AsyncCallback(PipeConnectionReceiveCallback),
_connection.BeginReceive(_connetionRecvBuffer, 0, RecvSize, SocketFlags.None, new AsyncCallback(PipeConnectionReceiveCallback),
new AsyncSession<bool>(session, true) /* to tell the callback this is the first time reading packet, and we haven't found the header yet. */); new AsyncSession<bool>(session, true) /* to tell the callback this is the first time reading packet, and we haven't found the header yet. */);
} }
catch (Exception e) catch (Exception e)
@@ -646,7 +646,6 @@ namespace Shadowsocks.Controller
int bytesToSend; int bytesToSend;
lock (_decryptionLock) lock (_decryptionLock)
{ {
if (_closed) return;
_encryptor.Decrypt(_remoteRecvBuffer, bytesRead, _remoteSendBuffer, out bytesToSend); _encryptor.Decrypt(_remoteRecvBuffer, bytesRead, _remoteSendBuffer, out bytesToSend);
} }
_connection.BeginSend(_remoteSendBuffer, 0, bytesToSend, SocketFlags.None, new AsyncCallback(PipeConnectionSendCallback), session); _connection.BeginSend(_remoteSendBuffer, 0, bytesToSend, SocketFlags.None, new AsyncCallback(PipeConnectionSendCallback), session);
@@ -672,7 +671,6 @@ namespace Shadowsocks.Controller
if (_closed) return; if (_closed) return;
try try
{ {
if(_connection == null) return;
int bytesRead = _connection.EndReceive(ar); int bytesRead = _connection.EndReceive(ar);
_totalWrite += bytesRead; _totalWrite += bytesRead;
@@ -720,7 +718,6 @@ namespace Shadowsocks.Controller
int bytesToSend; int bytesToSend;
lock (_encryptionLock) lock (_encryptionLock)
{ {
if (_closed) return;
_encryptor.Encrypt(_connetionRecvBuffer, bytesRead, _connetionSendBuffer, out bytesToSend); _encryptor.Encrypt(_connetionRecvBuffer, bytesRead, _connetionSendBuffer, out bytesToSend);
} }
_tcprelay.UpdateOutboundCounter(_server, bytesToSend); _tcprelay.UpdateOutboundCounter(_server, bytesToSend);
@@ -750,7 +747,7 @@ namespace Shadowsocks.Controller
{ {
var session = (AsyncSession)ar.AsyncState; var session = (AsyncSession)ar.AsyncState;
session.Remote.EndSend(ar); session.Remote.EndSend(ar);
_connection?.BeginReceive(_connetionRecvBuffer, 0, RecvSize, SocketFlags.None, new AsyncCallback(PipeConnectionReceiveCallback), session);
_connection.BeginReceive(_connetionRecvBuffer, 0, RecvSize, SocketFlags.None, new AsyncCallback(PipeConnectionReceiveCallback), session);
} }
catch (Exception e) catch (Exception e)
{ {
@@ -761,11 +758,10 @@ namespace Shadowsocks.Controller
private void PipeConnectionSendCallback(IAsyncResult ar) private void PipeConnectionSendCallback(IAsyncResult ar)
{ {
if (_closed) return;
try try
{ {
var session = (AsyncSession)ar.AsyncState; var session = (AsyncSession)ar.AsyncState;
_connection?.EndSend(ar);
_connection.EndSend(ar);
session.Remote.BeginReceive(_remoteRecvBuffer, 0, RecvSize, SocketFlags.None, new AsyncCallback(PipeRemoteReceiveCallback), session); session.Remote.BeginReceive(_remoteRecvBuffer, 0, RecvSize, SocketFlags.None, new AsyncCallback(PipeRemoteReceiveCallback), session);
} }
catch (Exception e) catch (Exception e)


Loading…
Cancel
Save