IssueRaiser

x/net/quic: add QUIC implementation

I propose adding an implementation of the QUIC transport protocol ([RFC 9000](https://www.rfc-editor.org/rfc/rfc9000.html)) in `golang.org/x/net/quic`. QUIC is the protocol underlying HTTP/3, and QUIC support is a necessary prerequisite for HTTP/3 support. The proposed API is in https://go.dev/cl/468575. This API does not include support for Early Data, but does not preclude adding that support at a later time. RFC 9000 does not define a QUIC API, but it does define a set of operations that can be performed on a QUIC [connection](https://www.rfc-editor.org/rfc/rfc9000.html#section-5.3) or [stream](https://www.rfc-editor.org/rfc/rfc9000.html#section-2.4). A QUIC connection is shared state between a client and server. * open a [client] connection: ```go conn, err := quic.Dial(ctx, "udp", "127.0.0.1:8000", &quic.Config{}) ``` * listen for incoming connections: ```go l, err := quic.Listen("udp", "127.0.0.1:8000", &quic.Config{}) conn, err := l.Accept(ctx) ``` A QUIC stream is an ordered, reliable byte stream. A connection may have many streams. (A QUIC stream is loosely analogous to a TCP connection.) * create streams: ```go s, err := conn.NewStream(ctx) ``` * accept streams created by the peer: ```go s, err := conn.AcceptStream(ctx) ``` * read from, write to, and close streams: ```go n, err = s.Read(buf) n, err = s.Write(buf) s.Close() ``` * stream operations also have Context-aware variants: ```go n, err = s.ReadContext(c

Posted by neild on Feb 15, 2023, 6:23 PM

Tags

Related issues

Raise real-world problems, find people facing the same issue, and discuss solutions.2,500 issues0 comments

support (Sysadmin)

x/net/quic: add QUIC implementation

neildFeb 15, 2023, 6:23 PM

I propose adding an implementation of the QUIC transport protocol ([RFC 9000](https://www.rfc-editor.org/rfc/rfc9000.html)) in `golang.org/x/net/quic`. QUIC is the protocol underlying HTTP/3, and QUIC support is a necessary prerequisite for HTTP/3 support. The proposed API is in https://go.dev/cl/468575. This API does not include support for Early Data, but does not preclude adding that support at a later time. RFC 9000 does not define a QUIC API, but it does define a set of operations that can be performed on a QUIC [connection](https://www.rfc-editor.org/rfc/rfc9000.html#section-5.3) or [stream](https://www.rfc-editor.org/rfc/rfc9000.html#section-2.4). A QUIC connection is shared state between a client and server. * open a [client] connection: ```go conn, err := quic.Dial(ctx, "udp", "127.0.0.1:8000", &quic.Config{}) ``` * listen for incoming connections: ```go l, err := quic.Listen("udp", "127.0.0.1:8000", &quic.Config{}) conn, err := l.Accept(ctx) ``` A QUIC stream is an ordered, reliable byte stream. A connection may have many streams. (A QUIC stream is loosely analogous to a TCP connection.) * create streams: ```go s, err := conn.NewStream(ctx) ``` * accept streams created by the peer: ```go s, err := conn.AcceptStream(ctx) ``` * read from, write to, and close streams: ```go n, err = s.Read(buf) n, err = s.Write(buf) s.Close() ``` * stream operations also have Context-aware variants: ```go n, err = s.ReadContext(c

Comments (0)

No comments yet. Start the discussion.

Comment on this issue