diff options
author | twosee <twose@qq.com> | 2021-05-28 22:57:59 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-05-28 10:57:59 -0400 |
commit | bcc4f8fdde45471f30e168fe27be347076ebdf2c (patch) | |
tree | ea8f96a82ff45403f6150d095931b568f47e7629 /src | |
parent | 6085bcef8dea1eaa21a92e2b6e6f03a0476b6c54 (diff) | |
download | libuv-bcc4f8fdde45471f30e168fe27be347076ebdf2c.tar.gz libuv-bcc4f8fdde45471f30e168fe27be347076ebdf2c.zip |
stream: introduce uv_try_write2 function
`uv_try_write2(stream, bufs, nbufs, send_handle)` acts like
`uv_try_write()` and extended write function for sending handles over a
pipe like `uv_write2`. It always returns `UV_EAGAIN` instead of
`UV_ENOSYS` on Windows so we can easily write cross-platform code
without special treatment.
PR-URL: https://github.com/libuv/libuv/pull/3183
Reviewed-By: Jameson Nash <vtjnash@gmail.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/unix/stream.c | 10 | ||||
-rw-r--r-- | src/win/stream.c | 10 |
2 files changed, 19 insertions, 1 deletions
diff --git a/src/unix/stream.c b/src/unix/stream.c index dd1f5538..f64c01cf 100644 --- a/src/unix/stream.c +++ b/src/unix/stream.c @@ -1525,6 +1525,14 @@ int uv_write(uv_write_t* req, int uv_try_write(uv_stream_t* stream, const uv_buf_t bufs[], unsigned int nbufs) { + return uv_try_write2(stream, bufs, nbufs, NULL); +} + + +int uv_try_write2(uv_stream_t* stream, + const uv_buf_t bufs[], + unsigned int nbufs, + uv_stream_t* send_handle) { int err; /* Connecting or already writing some data */ @@ -1535,7 +1543,7 @@ int uv_try_write(uv_stream_t* stream, if (err < 0) return err; - return uv__try_write(stream, bufs, nbufs, NULL); + return uv__try_write(stream, bufs, nbufs, send_handle); } diff --git a/src/win/stream.c b/src/win/stream.c index ebb5fe5c..abf477f6 100644 --- a/src/win/stream.c +++ b/src/win/stream.c @@ -188,6 +188,16 @@ int uv_try_write(uv_stream_t* stream, } +int uv_try_write2(uv_stream_t* stream, + const uv_buf_t bufs[], + unsigned int nbufs, + uv_stream_t* send_handle) { + if (send_handle != NULL) + return UV_EAGAIN; + return uv_try_write(stream, bufs, nbufs); +} + + int uv_shutdown(uv_shutdown_t* req, uv_stream_t* handle, uv_shutdown_cb cb) { uv_loop_t* loop = handle->loop; |