[Fix] Cancel timeout process
This commit is contained in:
parent
7c2d98bbb7
commit
2bc95c251f
@ -61,11 +61,13 @@ namespace WebSocketSharp.Net
|
|||||||
|
|
||||||
private byte[] _buffer;
|
private byte[] _buffer;
|
||||||
private const int _bufferLength = 8192;
|
private const int _bufferLength = 8192;
|
||||||
|
private volatile bool _cancelTimeout;
|
||||||
private HttpListenerContext _context;
|
private HttpListenerContext _context;
|
||||||
private bool _contextRegistered;
|
private bool _contextRegistered;
|
||||||
private StringBuilder _currentLine;
|
private StringBuilder _currentLine;
|
||||||
private InputState _inputState;
|
private InputState _inputState;
|
||||||
private RequestStream _inputStream;
|
private RequestStream _inputStream;
|
||||||
|
private volatile bool _inTimeout;
|
||||||
private HttpListener _lastListener;
|
private HttpListener _lastListener;
|
||||||
private LineState _lineState;
|
private LineState _lineState;
|
||||||
private EndPointListener _listener;
|
private EndPointListener _listener;
|
||||||
@ -291,6 +293,9 @@ namespace WebSocketSharp.Net
|
|||||||
conn._lastListener = lsnr;
|
conn._lastListener = lsnr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (conn._inTimeout)
|
||||||
|
conn._cancelTimeout = true;
|
||||||
|
|
||||||
conn._context.Listener = lsnr;
|
conn._context.Listener = lsnr;
|
||||||
if (!conn._context.Authenticate ())
|
if (!conn._context.Authenticate ())
|
||||||
return;
|
return;
|
||||||
@ -301,6 +306,9 @@ namespace WebSocketSharp.Net
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (conn._inTimeout)
|
||||||
|
conn._cancelTimeout = true;
|
||||||
|
|
||||||
conn._stream.BeginRead (conn._buffer, 0, _bufferLength, onRead, conn);
|
conn._stream.BeginRead (conn._buffer, 0, _bufferLength, onRead, conn);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -308,7 +316,29 @@ namespace WebSocketSharp.Net
|
|||||||
private static void onTimeout (object state)
|
private static void onTimeout (object state)
|
||||||
{
|
{
|
||||||
var conn = (HttpConnection) state;
|
var conn = (HttpConnection) state;
|
||||||
conn.close ();
|
|
||||||
|
conn._inTimeout = true;
|
||||||
|
if (conn._socket == null) {
|
||||||
|
conn._inTimeout = false;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
lock (conn._sync) {
|
||||||
|
if (conn._socket == null) {
|
||||||
|
conn._inTimeout = false;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (conn._cancelTimeout) {
|
||||||
|
conn._cancelTimeout = false;
|
||||||
|
conn._inTimeout = false;
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
conn.SendError (null, 408);
|
||||||
|
conn._inTimeout = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// true -> Done processing.
|
// true -> Done processing.
|
||||||
|
Loading…
Reference in New Issue
Block a user