Commit 91150da9 authored by binji@chromium.org's avatar binji@chromium.org

[NaCl SDK] Fix bug in TCPNode::Connect

Calling connect() would not fail if there was an error connecting. Instead it
would return 0 (success) and fail on the first read/write.

The fix is to check SocketNode::last_errno_ after the wait succeeds.

BUG=none
R=noelallen@chromium.org

Review URL: https://codereview.chromium.org/458563002

Cr-Commit-Position: refs/heads/master@{#288480}
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@288480 0039d316-1c4b-4281-b951-d872f2087c98
parent f5e4c6f8
......@@ -488,6 +488,12 @@ Error TcpNode::Connect(const HandleAttr& attr,
return err;
}
// Make sure the connection succeeded.
if (last_errno_ != 0) {
ConnectFailed_Locked();
return last_errno_;
}
ConnectDone_Locked();
return 0;
}
......
......@@ -392,6 +392,16 @@ TEST_F(SocketTestWithServer, TCPConnectNonBlock) {
// And SO_ERROR should be 0.
}
TEST_F(SocketTestTCP, TCPConnectFails) {
sockaddr_in addr;
socklen_t addrlen = sizeof(addr);
// 10 is an unassigned well-known port, nothing should be bound to it.
IP4ToSockAddr(LOCAL_HOST, 10, &addr);
ASSERT_EQ(-1, ki_connect(sock1_, (sockaddr*) &addr, addrlen));
ASSERT_EQ(ECONNREFUSED, errno);
}
TEST_F(SocketTest, Getsockopt) {
sock1_ = ki_socket(AF_INET, SOCK_STREAM, 0);
EXPECT_GT(sock1_, -1);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment