/// <summary> /// Register a timeout handler for connect operation. /// </summary> /// <param name="result"></param> /// <param name="client"></param> /// <param name="timeout"></param> public static void RegisterConnect(IAsyncResult result, Socket client, int timeout) { if (timeout < 0) { return; } WaitHandle wait = result.AsyncWaitHandle; if (wait == null) { return; } AsyncOperationTimeoutState state = new AsyncOperationTimeoutState { Request = client, }; state.Handle = ThreadPool.RegisterWaitForSingleObject(wait, (userState, isTimeout) => { AsyncOperationTimeoutState ts = (AsyncOperationTimeoutState)userState; Socket socket = (Socket)ts.Request; try { if (isTimeout) { socket.Close(); } } finally { if (ts.Handle != null) { ts.Handle.Unregister(null); } } }, state, timeout, true); }
/// <summary> /// Register a timeout handler. /// </summary> /// <param name="result"></param> /// <param name="request"></param> /// <param name="timeout"></param> public static void RegisterRequest(IAsyncResult result, WebRequest request, int timeout) { if (timeout < 0) { return; } WaitHandle wait = result.AsyncWaitHandle; if (wait == null) { return; } AsyncOperationTimeoutState state = new AsyncOperationTimeoutState { Request = request, }; state.Handle = ThreadPool.RegisterWaitForSingleObject(wait, (userState, isTimeout) => { AsyncOperationTimeoutState ts = (AsyncOperationTimeoutState)userState; WebRequest webRequst = (WebRequest)ts.Request; try { if (isTimeout) { webRequst.Abort(); } } finally { if (ts.Handle != null) { ts.Handle.Unregister(null); } } }, state, timeout, true); }