Browse Source

check close actively

tags/2.3
clowwindy 10 years ago
parent
commit
ef050cd3c3
2 changed files with 71 additions and 7 deletions
  1. +66
    -5
      shadowsocks-csharp/Controller/Local.cs
  2. +5
    -2
      shadowsocks-csharp/Controller/PACServer.cs

+ 66
- 5
shadowsocks-csharp/Controller/Local.cs View File

@@ -115,6 +115,9 @@ namespace Shadowsocks.Controller
private bool connectionShutdown = false;
private bool remoteShutdown = false;
private bool closed = false;
private object encryptionLock = new object();
private object decryptionLock = new object();
public void Start()
{
@@ -188,11 +191,21 @@ namespace Shadowsocks.Controller
Console.WriteLine(e);
}
}
((IDisposable)encryptor).Dispose();
lock (encryptionLock)
{
lock (decryptionLock)
{
((IDisposable)encryptor).Dispose();
}
}
}
private void ConnectCallback(IAsyncResult ar)
{
if (closed)
{
return;
}
try
{
// Complete the connection.
@@ -212,6 +225,10 @@ namespace Shadowsocks.Controller
private void HandshakeReceive()
{
if (closed)
{
return;
}
try
{
connection.BeginReceive(connetionRecvBuffer, 0, 256, 0,
@@ -226,6 +243,10 @@ namespace Shadowsocks.Controller
private void HandshakeReceiveCallback(IAsyncResult ar)
{
if (closed)
{
return;
}
try
{
int bytesRead = connection.EndReceive(ar);
@@ -255,6 +276,10 @@ namespace Shadowsocks.Controller
private void HandshakeSendCallback(IAsyncResult ar)
{
if (closed)
{
return;
}
try
{
connection.EndSend(ar);
@@ -278,6 +303,10 @@ namespace Shadowsocks.Controller
private void handshakeReceive2Callback(IAsyncResult ar)
{
if (closed)
{
return;
}
try
{
int bytesRead = connection.EndReceive(ar);
@@ -303,6 +332,10 @@ namespace Shadowsocks.Controller
private void StartPipe(IAsyncResult ar)
{
if (closed)
{
return;
}
try
{
connection.EndReceive(ar);
@@ -320,7 +353,10 @@ namespace Shadowsocks.Controller
private void PipeRemoteReceiveCallback(IAsyncResult ar)
{
if (closed)
{
return;
}
try
{
int bytesRead = remote.EndReceive(ar);
@@ -328,7 +364,14 @@ namespace Shadowsocks.Controller
if (bytesRead > 0)
{
int bytesToSend;
encryptor.Decrypt(remoteRecvBuffer, bytesRead, remoteSendBuffer, out bytesToSend);
lock (decryptionLock)
{
if (closed)
{
return;
}
encryptor.Decrypt(remoteRecvBuffer, bytesRead, remoteSendBuffer, out bytesToSend);
}
connection.BeginSend(remoteSendBuffer, 0, bytesToSend, 0, new AsyncCallback(PipeConnectionSendCallback), null);
}
else
@@ -348,7 +391,10 @@ namespace Shadowsocks.Controller
private void PipeConnectionReceiveCallback(IAsyncResult ar)
{
if (closed)
{
return;
}
try
{
int bytesRead = connection.EndReceive(ar);
@@ -356,7 +402,14 @@ namespace Shadowsocks.Controller
if (bytesRead > 0)
{
int bytesToSend;
encryptor.Encrypt(connetionRecvBuffer, bytesRead, connetionSendBuffer, out bytesToSend);
lock (encryptionLock)
{
if (closed)
{
return;
}
encryptor.Encrypt(connetionRecvBuffer, bytesRead, connetionSendBuffer, out bytesToSend);
}
remote.BeginSend(connetionSendBuffer, 0, bytesToSend, 0, new AsyncCallback(PipeRemoteSendCallback), null);
}
else
@@ -375,6 +428,10 @@ namespace Shadowsocks.Controller
private void PipeRemoteSendCallback(IAsyncResult ar)
{
if (closed)
{
return;
}
try
{
remote.EndSend(ar);
@@ -390,6 +447,10 @@ namespace Shadowsocks.Controller
private void PipeConnectionSendCallback(IAsyncResult ar)
{
if (closed)
{
return;
}
try
{
connection.EndSend(ar);


+ 5
- 2
shadowsocks-csharp/Controller/PACServer.cs View File

@@ -87,9 +87,12 @@ namespace Shadowsocks.Controller
conn.BeginReceive(new byte[1024], 0, 1024, 0,
new AsyncCallback(ReceiveCallback), conn);
}
catch (ObjectDisposedException)
{
}
catch (Exception e)
{
Console.WriteLine(e.Message);
Console.WriteLine(e);
}
}
@@ -152,7 +155,7 @@ Connection: Close
}
catch (Exception e)
{
Console.WriteLine(e.Message);
Console.WriteLine(e);
conn.Close();
}
}


Loading…
Cancel
Save