From 2838616b170848f88b30409fe7c39982126e8804 Mon Sep 17 00:00:00 2001 From: Ingo Weinhold Date: Thu, 24 Apr 2008 14:19:58 +0000 Subject: [PATCH] Translate connect()s to INADDR_ANY to INADDR_LOOPBACK. Not sure, if that is required, but Linux seems to do it. It also allows us to create AF_INET socketpair()s -- not really needed, but probably nice for testing. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25126 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/add-ons/kernel/network/protocols/tcp/TCPEndpoint.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/add-ons/kernel/network/protocols/tcp/TCPEndpoint.cpp b/src/add-ons/kernel/network/protocols/tcp/TCPEndpoint.cpp index 1a497fe69f..a11df3a02b 100644 --- a/src/add-ons/kernel/network/protocols/tcp/TCPEndpoint.cpp +++ b/src/add-ons/kernel/network/protocols/tcp/TCPEndpoint.cpp @@ -417,6 +417,15 @@ TCPEndpoint::Connect(const sockaddr *address) } else if (fState != CLOSED) return EINPROGRESS; + // consider destination address INADDR_ANY as INADDR_LOOPBACK + sockaddr_in _address; + if (((sockaddr_in*)address)->sin_addr.s_addr == INADDR_ANY) { + memcpy(&_address, address, sizeof(sockaddr_in)); + _address.sin_len = sizeof(sockaddr_in); + _address.sin_addr.s_addr = INADDR_LOOPBACK; + address = (sockaddr*)&_address; + } + status_t status = _PrepareSendPath(address); if (status < B_OK) return status;