ctxio

package
v0.0.0-...-d14ea06 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 11, 2015 License: MIT Imports: 2 Imported by: 328

Documentation

Overview

Package ctxio provides io.Reader and io.Writer wrappers that respect context.Contexts. Use these at the interface between your context code and your io.

WARNING: read the code. see how writes and reads will continue until you cancel the io. Maybe this package should provide versions of io.ReadCloser and io.WriteCloser that automatically call .Close when the context expires. But for now -- since in my use cases I have long-lived connections with ephemeral io wrappers -- this has yet to be a need.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func NewReader

func NewReader(ctx context.Context, r io.Reader) *ctxReader

NewReader wraps a reader to make it respect given Context. If there is a blocking read, the returned Reader will return whenever the context is cancelled (the return values are n=0 and err=ctx.Err().)

Note well: this wrapper DOES NOT ACTUALLY cancel the underlying write-- there is no way to do that with the standard go io interface. So the read and write _will_ happen or hang. So, use this sparingly, make sure to cancel the read or write as necesary (e.g. closing a connection whose context is up, etc.)

Furthermore, in order to protect your memory from being read _before_ you've cancelled the context, this io.Reader will allocate a buffer of the same size, and **copy** into the client's if the read succeeds in time.

func NewWriter

func NewWriter(ctx context.Context, w io.Writer) *ctxWriter

NewWriter wraps a writer to make it respect given Context. If there is a blocking write, the returned Writer will return whenever the context is cancelled (the return values are n=0 and err=ctx.Err().)

Note well: this wrapper DOES NOT ACTUALLY cancel the underlying write-- there is no way to do that with the standard go io interface. So the read and write _will_ happen or hang. So, use this sparingly, make sure to cancel the read or write as necesary (e.g. closing a connection whose context is up, etc.)

Furthermore, in order to protect your memory from being read _after_ you've cancelled the context, this io.Writer will first make a **copy** of the buffer.

Types

type Reader

type Reader interface {
	io.Reader
}

type Writer

type Writer interface {
	io.Writer
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL