summaryrefslogtreecommitdiff
path: root/deps/uv/src/win/stream.c
diff options
context:
space:
mode:
Diffstat (limited to 'deps/uv/src/win/stream.c')
-rw-r--r--deps/uv/src/win/stream.c18
1 files changed, 16 insertions, 2 deletions
diff --git a/deps/uv/src/win/stream.c b/deps/uv/src/win/stream.c
index 057f72ecad..36d88d00bd 100644
--- a/deps/uv/src/win/stream.c
+++ b/deps/uv/src/win/stream.c
@@ -184,8 +184,22 @@ int uv_write2(uv_write_t* req,
int uv_try_write(uv_stream_t* stream,
const uv_buf_t bufs[],
unsigned int nbufs) {
- /* NOTE: Won't work with overlapped writes */
- return UV_ENOSYS;
+ if (stream->flags & UV__HANDLE_CLOSING)
+ return UV_EBADF;
+ if (!(stream->flags & UV_HANDLE_WRITABLE))
+ return UV_EPIPE;
+
+ switch (stream->type) {
+ case UV_TCP:
+ return uv__tcp_try_write((uv_tcp_t*) stream, bufs, nbufs);
+ case UV_TTY:
+ return uv__tty_try_write((uv_tty_t*) stream, bufs, nbufs);
+ case UV_NAMED_PIPE:
+ return UV_EAGAIN;
+ default:
+ assert(0);
+ return UV_ENOSYS;
+ }
}