Skip to content

Commit

Permalink
Update index.bs
Browse files Browse the repository at this point in the history
  • Loading branch information
jasnell authored Nov 5, 2023
1 parent 226f2fb commit 1849323
Showing 1 changed file with 9 additions and 7 deletions.
16 changes: 9 additions & 7 deletions index.bs
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,8 @@ The connect method is the primary mechanism for creating a [=socket=] instance.

<h3 id="binding-object-concept">Binding Object</h3>

<p class="note">A [=binding object=] in this context is essentially just an object that exposes the a [=connect=] method conformant with this specification. It is anticipated that a runtime may have any number of such objects. This is an area where there is still active discussion on how this should be defined.</p>

The <dfn export>binding object</dfn> defines extra socket `connect` options. The options it contains can modify the
behaviour of the `connect` invoked on it. Some of the options it can define:

Expand All @@ -63,7 +65,7 @@ The binding object is the primary mechanism for runtimes to introduce unique beh

<pre highlight="js">
const tls_socket = new TLSSocket({ key: '...', cert: '...' });
tls_socket.connect();
tls_socket.connect("example.com:1234");
</pre>

Additionally, the binding object does not necessarily have to be an instance of a class, nor does it even have to be JavaScript. It can be any mechanism that exposes the {{connect()}} method. Cloudflare achieves this through [environment bindings](https://developers.cloudflare.com/workers/configuration/bindings/).
Expand Down Expand Up @@ -145,9 +147,7 @@ The {{readable}} attribute is a {{ReadableStream}} which receives data from the
</pre>
</div>

The ReadableStream operates in non-byte mode, that is the `type` parameter to the
ReadableStream constructor is not set.
This means the stream's controller is {{ReadableStreamDefaultController}}.
The ReadableStream currently is defined to operate in byte mode, that is the `type` parameter to the ReadableStream constructor is set to `'bytes'`. This means the stream's controller is {{ReadableByteStreamDController}}.

<h4 id="writable-attribute">writable</h4>

Expand Down Expand Up @@ -253,6 +253,8 @@ The method must fail with an [=SocketError=] if:

<h3 id="socket-error">SocketError</h3>

<p class="note">Arguably, this should be a type of {{DOMException}} rather than {{TypeError}}. More discussion is necessary on the form and structure of socket-related errors.</p>

<dfn export>SocketError</dfn> is an instance of {{TypeError}}. The error message should start with `"SocketError: "`.

<div class="example">
Expand Down Expand Up @@ -299,11 +301,11 @@ The {{connect()}} method performs the following steps:
<li>The created {{Socket}} instance is returned immediately in a <i>pending</i> state.</li>
<li>A connection is established to the specified {{SocketAddress}} asynchronously.</li>
<li>Once the connection is established, set |info| to a new {{SocketInfo}}, and [=Resolve=] |opened| with |info|. For a socket using secure transport, the connection is considered to be established once the secure handshake has been completed.</li>
<li>If the connection fails for any reason, the socket's {{closed}} and {{opened}} promises are rejected with a [=SocketError=] describing why the connection failed.</li>
<li>The instance's {{ReadableStream}} and {{WritableStream}} streams can be used immediately.</li>
<li>If the connection fails for any reason, set |error| to a new [=SocketError=] and reject the socket's {{closed}} and {{opened}} promises with |error|. Also, the {{readable}} is canceled with |error| and the {{writable}} is aborted with |error|.</li>
<li>The instance's {{ReadableStream}} and {{WritableStream}} streams can be used immediately but may not actually transmit or receive data until the socket is fully opened.</li>
</ol>

At any point during the creation of the {{Socket}} instance, `connect` may throw a [=SocketError=]. One case where this can happen is if the input address is incorrectly formatted. Errors which occur asynchronously (after the socket instance has been returned) must reject the socket's {{closed}} promise.
At any point during the creation of the {{Socket}} instance, `connect` may throw a [=SocketError=]. One case where this can happen is if the input address is incorrectly formatted.

<div class="note">
The implementation may consider blocking connections to certain hostname/port combinations which can pose a threat of abuse or security vulnerability.
Expand Down

0 comments on commit 1849323

Please sign in to comment.