Windows: backport pipe-connect-to-file fixes from master
Conflicts:
src/win/pipe.c
commit e53ab6675ba12d97ad6d93c9913a473ba5172617
Author: Bert Belder <bertbelder@gmail.com>
Date: Fri Mar 9 17:04:03 2012 +0100
Windows: report UV_ENOTSOCK when we opened a file instead of a pipe
Makes the pipe_connect_to_file test pass on Windows.
commit 8cbbfbe4c6489868470a7e410f80d4729f4091bf
Author: Igor Zinkovsky <igorzi@microsoft.com>
Date: Thu Mar 1 14:32:59 2012 -0800
test: make pipe_connect_to_file succeed with ECONNREFUSED
commit 6bbccf1fe0
Author: Igor Zinkovsky <igorzi@microsoft.com>
Date: Thu Mar 1 12:11:12 2012 -0800
windows: return UV_ENOTSOCK when doing uv_pipe_connect to a file
This commit is contained in:
parent
9c8f6dd4f9
commit
cda7a28039
@ -125,6 +125,7 @@ uv_err_code uv_translate_sys_error(int sys_errno) {
|
||||
case ERROR_SEM_TIMEOUT: return UV_ETIMEDOUT;
|
||||
case WSAETIMEDOUT: return UV_ETIMEDOUT;
|
||||
case WSAHOST_NOT_FOUND: return UV_ENOENT;
|
||||
case WSAENOTSOCK: return UV_ENOTSOCK;
|
||||
default: return UV_UNKNOWN;
|
||||
}
|
||||
}
|
||||
|
||||
@ -217,6 +217,11 @@ static int uv_set_pipe_handle(uv_loop_t* loop, uv_pipe_t* handle,
|
||||
DWORD mode = PIPE_TYPE_BYTE | PIPE_READMODE_BYTE | PIPE_WAIT;
|
||||
|
||||
if (!SetNamedPipeHandleState(pipeHandle, &mode, NULL, NULL)) {
|
||||
/* If this returns ERROR_INVALID_PARAMETER we probably opened something */
|
||||
/* that is not a pipe. */
|
||||
if (GetLastError() == ERROR_INVALID_PARAMETER) {
|
||||
SetLastError(WSAENOTSOCK);
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
@ -57,6 +57,7 @@ TEST_DECLARE (pipe_bind_error_addrnotavail)
|
||||
TEST_DECLARE (pipe_bind_error_inval)
|
||||
TEST_DECLARE (pipe_listen_without_bind)
|
||||
TEST_DECLARE (pipe_connect_bad_name)
|
||||
TEST_DECLARE (pipe_connect_to_file)
|
||||
TEST_DECLARE (connection_fail)
|
||||
TEST_DECLARE (connection_fail_doesnt_auto_close)
|
||||
TEST_DECLARE (shutdown_close_tcp)
|
||||
@ -155,6 +156,7 @@ HELPER_DECLARE (pipe_echo_server)
|
||||
|
||||
TASK_LIST_START
|
||||
TEST_ENTRY (pipe_connect_bad_name)
|
||||
TEST_ENTRY (pipe_connect_to_file)
|
||||
|
||||
TEST_ENTRY (tty)
|
||||
TEST_ENTRY (stdio_over_pipes)
|
||||
|
||||
@ -50,6 +50,15 @@ static void connect_cb(uv_connect_t* connect_req, int status) {
|
||||
}
|
||||
|
||||
|
||||
static void connect_cb_file(uv_connect_t* connect_req, int status) {
|
||||
ASSERT(status == -1);
|
||||
ASSERT(uv_last_error(uv_default_loop()).code == UV_ENOTSOCK ||
|
||||
uv_last_error(uv_default_loop()).code == UV_ECONNREFUSED);
|
||||
uv_close((uv_handle_t*)connect_req->handle, close_cb);
|
||||
connect_cb_called++;
|
||||
}
|
||||
|
||||
|
||||
TEST_IMPL(pipe_connect_bad_name) {
|
||||
uv_pipe_t client;
|
||||
uv_connect_t req;
|
||||
@ -66,3 +75,22 @@ TEST_IMPL(pipe_connect_bad_name) {
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
TEST_IMPL(pipe_connect_to_file) {
|
||||
const char* path = "test/fixtures/empty_file";
|
||||
uv_pipe_t client;
|
||||
uv_connect_t req;
|
||||
int r;
|
||||
|
||||
r = uv_pipe_init(uv_default_loop(), &client, 0);
|
||||
ASSERT(r == 0);
|
||||
uv_pipe_connect(&req, &client, path, connect_cb_file);
|
||||
|
||||
uv_run(uv_default_loop());
|
||||
|
||||
ASSERT(close_cb_called == 1);
|
||||
ASSERT(connect_cb_called == 1);
|
||||
|
||||
return 0;
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user