@@ -160,7 +160,8 @@ frameReceiver ctx mkreq recvN = loop 0 `E.catch` sendGoaway
160160 when (ftyp == FrameHeaders) $ do
161161 writeIORef currentStreamId streamId
162162 cnt <- readIORef concurrency
163− when (cnt >= recommendedConcurrency) $
163+ -- Checking the limitation of concurrency
164+ when (cnt >= maxConcurrency) $
164165 E.throwIO $ StreamError RefusedStream streamId
165166 ws <- initialWindowSize <$> readIORef http2settings
166167 newstrm <- newStream streamId (fromIntegral ws)
@@ -170,8 +171,11 @@ frameReceiver ctx mkreq recvN = loop 0 `E.catch` sendGoaway
170171
171172 consume = void . recvN
172173
174+maxConcurrency :: Int
175+maxConcurrency = recommendedConcurrency
176+
173177initialFrame :: ByteString
174−initialFrame = settingsFrame id [(SettingsMaxConcurrentStreams,recommendedConcurrency)]
178+initialFrame = settingsFrame id [(SettingsMaxConcurrentStreams,maxConcurrency)]
175179
176180----------------------------------------------------------------
177181
@@ -181,6 +185,7 @@ control FrameSettings header@FrameHeader{flags} bs Context{http2settings, contro
181185 case checkSettingsList alist of
182186 Just x -> E.throwIO x
183187 Nothing -> return ()
188+ -- HTTP/2 Setting from a browser
184189 unless (testAck flags) $ do
185190 modifyIORef' http2settings $ \old -> updateSettings old alist
186191 let !frame = settingsFrame setAck []