<feed xmlns='http://www.w3.org/2005/Atom'>
<title>gun.git/doc/src/manual, branch http3</title>
<subtitle>HTTP/1.1, HTTP/2 and Websocket client for Erlang/OTP.
</subtitle>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/gun.git/'/>
<entry>
<title>Update Cowlib to 2.13.0</title>
<updated>2024-03-14T12:25:50+00:00</updated>
<author>
<name>Loïc Hoguin</name>
<email>essen@ninenines.eu</email>
</author>
<published>2024-03-14T12:25:50+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/gun.git/commit/?id=f0c19d6674d792defc181333e20268b785ce4321'/>
<id>f0c19d6674d792defc181333e20268b785ce4321</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Add keepalive_tolerance http2 option</title>
<updated>2022-12-06T15:47:40+00:00</updated>
<author>
<name>Viktor Söderqvist</name>
<email>viktor.soderqvist@est.tech</email>
</author>
<published>2022-05-12T21:37:49+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/gun.git/commit/?id=c1f9122ab2a646df9182e51e3181de6ffa71af0c'/>
<id>c1f9122ab2a646df9182e51e3181de6ffa71af0c</id>
<content type='text'>
The number of unacknowledged pings that can be tolerated
before the connection is forcefully closed.

When a keepalive ping is sent to the peer, a counter is
incremented and if this counter exceeds the tolerance limit,
the connection is forcefully closed. The counter is
decremented whenever a ping ack is received from the peer.

By default, the mechanism for closing the connection based
on ping and ping ack is disabled.

Loïc Hoguin: I have edited a lot of the code and renamed
a few things as well as simplified the docs and increased
test timeouts to avoid race conditions.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The number of unacknowledged pings that can be tolerated
before the connection is forcefully closed.

When a keepalive ping is sent to the peer, a counter is
incremented and if this counter exceeds the tolerance limit,
the connection is forcefully closed. The counter is
decremented whenever a ping ack is received from the peer.

By default, the mechanism for closing the connection based
on ping and ping ack is disabled.

Loïc Hoguin: I have edited a lot of the code and renamed
a few things as well as simplified the docs and increased
test timeouts to avoid race conditions.
</pre>
</div>
</content>
</entry>
<entry>
<title>Document Websocket subprotocol negotiation</title>
<updated>2022-12-05T16:22:09+00:00</updated>
<author>
<name>Loïc Hoguin</name>
<email>essen@ninenines.eu</email>
</author>
<published>2022-12-05T16:22:09+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/gun.git/commit/?id=172800967c2d53251d7cb1015e3c957c5b065bb1'/>
<id>172800967c2d53251d7cb1015e3c957c5b065bb1</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Enable send timeouts by default</title>
<updated>2022-11-21T12:19:12+00:00</updated>
<author>
<name>Loïc Hoguin</name>
<email>essen@ninenines.eu</email>
</author>
<published>2022-11-21T12:19:12+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/gun.git/commit/?id=395490ea791cad34fd9130feb37eb145b16c1dde'/>
<id>395490ea791cad34fd9130feb37eb145b16c1dde</id>
<content type='text'>
When no TCP options are provided, Gun will enable send
timeouts at 15s. The value was chosen large enough to
be safe while still allowing Gun to detect send errors
eventually. Different applications may need to tweak
and lower this value.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
When no TCP options are provided, Gun will enable send
timeouts at 15s. The value was chosen large enough to
be safe while still allowing Gun to detect send errors
eventually. Different applications may need to tweak
and lower this value.
</pre>
</div>
</content>
</entry>
<entry>
<title>Initial commit for Gun pools</title>
<updated>2021-02-07T16:31:38+00:00</updated>
<author>
<name>Loïc Hoguin</name>
<email>essen@ninenines.eu</email>
</author>
<published>2021-01-11T14:14:49+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/gun.git/commit/?id=36fdf30fcf09a8ffe20c3498ac0b58de0971fd7d'/>
<id>36fdf30fcf09a8ffe20c3498ac0b58de0971fd7d</id>
<content type='text'>
The approach taken here is very similar to what browsers are
doing. A separate pool is created for each host/port/scope.
The authority (host header) is used to determine which pool
will execute requests. A connection process is semi-randomly
chosen, from the connections that have capacity. Maximum
capacity is determined by the protocol (the HTTP/2 setting
set by the server is used, for example). Multiple processes
can process requests/responses on the same connection
concurrently. There is no need to "give back" the response
to the pool, the number of ongoing streams is maintained via
an event handler.

The implementation is currently not strict, there may be
more attempts to create requests than there is capacity.
I'm not sure if it should be made strict or if Gun should
just wait before sending requests (it only matters in the
HTTP/2 case at the moment).

When there is no connection with capacity available in the
pool (because they have too many streams, or are reconnecting,
or any other reason), checking out fails. There is no timeout
to wait for a connection to be available. On the other hand
the checkout_retry option allows setting multiple timeouts
to retry checking out a connection. Each retry attempt's
wait time can have a different value.

The initial implementation of this work was sponsored by
Kobil and made at the suggestion of Ilya Khaprov.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The approach taken here is very similar to what browsers are
doing. A separate pool is created for each host/port/scope.
The authority (host header) is used to determine which pool
will execute requests. A connection process is semi-randomly
chosen, from the connections that have capacity. Maximum
capacity is determined by the protocol (the HTTP/2 setting
set by the server is used, for example). Multiple processes
can process requests/responses on the same connection
concurrently. There is no need to "give back" the response
to the pool, the number of ongoing streams is maintained via
an event handler.

The implementation is currently not strict, there may be
more attempts to create requests than there is capacity.
I'm not sure if it should be made strict or if Gun should
just wait before sending requests (it only matters in the
HTTP/2 case at the moment).

When there is no connection with capacity available in the
pool (because they have too many streams, or are reconnecting,
or any other reason), checking out fails. There is no timeout
to wait for a connection to be available. On the other hand
the checkout_retry option allows setting multiple timeouts
to retry checking out a connection. Each retry attempt's
wait time can have a different value.

The initial implementation of this work was sponsored by
Kobil and made at the suggestion of Ilya Khaprov.
</pre>
</div>
</content>
</entry>
<entry>
<title>Return 'undefined' for raw|socks origin_scheme where applicable</title>
<updated>2020-11-12T14:27:07+00:00</updated>
<author>
<name>Loïc Hoguin</name>
<email>essen@ninenines.eu</email>
</author>
<published>2020-11-12T14:27:07+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/gun.git/commit/?id=492c955819eec864e3f3ea2760d3ee7800851356'/>
<id>492c955819eec864e3f3ea2760d3ee7800851356</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Replace gun:ws_send/2 with gun:ws_send/3</title>
<updated>2020-11-12T13:00:41+00:00</updated>
<author>
<name>Loïc Hoguin</name>
<email>essen@ninenines.eu</email>
</author>
<published>2020-11-12T13:00:41+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/gun.git/commit/?id=4a58077d5162325fa5723690e58e7364adbcb18c'/>
<id>4a58077d5162325fa5723690e58e7364adbcb18c</id>
<content type='text'>
Switching from /2 to /3 should be easy enough.

Also update the documentation about HTTP/2 Websocket support.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Switching from /2 to /3 should be easy enough.

Also update the documentation about HTTP/2 Websocket support.
</pre>
</div>
</content>
</entry>
<entry>
<title>Add more new keys to gun:info and gun:stream_info manuals</title>
<updated>2020-11-12T10:46:53+00:00</updated>
<author>
<name>Loïc Hoguin</name>
<email>essen@ninenines.eu</email>
</author>
<published>2020-11-12T10:46:53+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/gun.git/commit/?id=52ec0b5b9f297c8dfca9160dfd344abf08a4850c'/>
<id>52ec0b5b9f297c8dfca9160dfd344abf08a4850c</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Use gun:stream_ref() where applicable</title>
<updated>2020-11-12T10:25:33+00:00</updated>
<author>
<name>Loïc Hoguin</name>
<email>essen@ninenines.eu</email>
</author>
<published>2020-11-12T10:25:33+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/gun.git/commit/?id=01eb4636f7a25ccdd3099629cb0d580ee8688dcc'/>
<id>01eb4636f7a25ccdd3099629cb0d580ee8688dcc</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Update gun_tunnel_up manual</title>
<updated>2020-11-12T10:12:56+00:00</updated>
<author>
<name>Loïc Hoguin</name>
<email>essen@ninenines.eu</email>
</author>
<published>2020-11-12T10:12:56+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/gun.git/commit/?id=24f217ee8a45fbc89d4a7615dd0bd360fc839708'/>
<id>24f217ee8a45fbc89d4a7615dd0bd360fc839708</id>
<content type='text'>
It was missing the StreamRef from the message.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
It was missing the StreamRef from the message.
</pre>
</div>
</content>
</entry>
</feed>
