private async Task <string> ReadRequest(StreamSocket socket) { var request = string.Empty; using (var inputStream = socket.InputStream) { var data = new byte[BUFFER_SIZE]; var buffer = data.AsBuffer(); var startReadRequest = DateTime.Now; while (!HttpGetRequestHasUrl(request)) { if (DateTime.Now.Subtract(startReadRequest) >= TimeSpan.FromMilliseconds(5000)) { throw new TaskCanceledException("Request timeout."); } var inputStreamReadTask = inputStream.ReadAsync(buffer, BUFFER_SIZE, InputStreamOptions.Partial); var timeout = TimeSpan.FromMilliseconds(1000); await TaskHelper.CancelTaskAfterTimeout(ct => inputStreamReadTask.AsTask(ct), timeout); request += Encoding.UTF8.GetString(data, 0, data.Length); } } var requestMethod = request.Split('\n')[0]; var requestParts = requestMethod.Split(' '); var relativeUrl = requestParts.Length > 1 ? requestParts[1] : string.Empty; return(relativeUrl); }