Browse Source

Fix a null ref exception.

tags/3.3
noisyfox 8 years ago
parent
commit
5b2327776a
1 changed files with 6 additions and 3 deletions
  1. +6
    -3
      shadowsocks-csharp/Controller/Service/Listener.cs

+ 6
- 3
shadowsocks-csharp/Controller/Service/Listener.cs View File

@@ -27,6 +27,7 @@ namespace Shadowsocks.Controller
public class UDPState public class UDPState
{ {
public Socket socket;
public byte[] buffer = new byte[4096]; public byte[] buffer = new byte[4096];
public EndPoint remoteEndPoint = new IPEndPoint(IPAddress.Any, 0); public EndPoint remoteEndPoint = new IPEndPoint(IPAddress.Any, 0);
} }
@@ -86,6 +87,7 @@ namespace Shadowsocks.Controller
Logging.Info("Shadowsocks started"); Logging.Info("Shadowsocks started");
_tcpSocket.BeginAccept(new AsyncCallback(AcceptCallback), _tcpSocket); _tcpSocket.BeginAccept(new AsyncCallback(AcceptCallback), _tcpSocket);
UDPState udpState = new UDPState(); UDPState udpState = new UDPState();
udpState.socket = _udpSocket;
_udpSocket.BeginReceiveFrom(udpState.buffer, 0, udpState.buffer.Length, 0, ref udpState.remoteEndPoint, new AsyncCallback(RecvFromCallback), udpState); _udpSocket.BeginReceiveFrom(udpState.buffer, 0, udpState.buffer.Length, 0, ref udpState.remoteEndPoint, new AsyncCallback(RecvFromCallback), udpState);
} }
catch (SocketException) catch (SocketException)
@@ -114,12 +116,13 @@ namespace Shadowsocks.Controller
public void RecvFromCallback(IAsyncResult ar) public void RecvFromCallback(IAsyncResult ar)
{ {
UDPState state = (UDPState)ar.AsyncState; UDPState state = (UDPState)ar.AsyncState;
var socket = state.socket;
try try
{ {
int bytesRead = _udpSocket.EndReceiveFrom(ar, ref state.remoteEndPoint);
int bytesRead = socket.EndReceiveFrom(ar, ref state.remoteEndPoint);
foreach (IService service in _services) foreach (IService service in _services)
{ {
if (service.Handle(state.buffer, bytesRead, _udpSocket, state))
if (service.Handle(state.buffer, bytesRead, socket, state))
{ {
break; break;
} }
@@ -136,7 +139,7 @@ namespace Shadowsocks.Controller
{ {
try try
{ {
_udpSocket.BeginReceiveFrom(state.buffer, 0, state.buffer.Length, 0, ref state.remoteEndPoint, new AsyncCallback(RecvFromCallback), state);
socket.BeginReceiveFrom(state.buffer, 0, state.buffer.Length, 0, ref state.remoteEndPoint, new AsyncCallback(RecvFromCallback), state);
} }
catch (ObjectDisposedException) catch (ObjectDisposedException)
{ {


Loading…
Cancel
Save