initialize the local address before calling getsockname() on it (closes #10779)

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@60567 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin 2009-05-09 13:07:21 +00:00
parent afeeb04d7a
commit 7172db1857
2 changed files with 32 additions and 0 deletions

View File

@ -166,6 +166,30 @@ public:
#ifdef wxHAS_UNIX_DOMAIN_SOCKETS
void CreateUnix();
#endif // wxHAS_UNIX_DOMAIN_SOCKETS
void Create(Family family)
{
switch ( family )
{
case FAMILY_INET:
CreateINET();
break;
#if wxUSE_IPV6
case FAMILY_INET6:
CreateINET6();
break;
#endif
#ifdef wxHAS_UNIX_DOMAIN_SOCKETS
case FAMILY_UNIX:
#endif
CreateUnix();
break;
default:
wxFAIL_MSG( "unsupported socket address family" );
}
}
// simple accessors
Family GetFamily() const { return m_family; }

View File

@ -364,6 +364,14 @@ void wxSocketImpl::PostCreation()
wxSocketError wxSocketImpl::UpdateLocalAddress()
{
if ( !m_local.IsOk() )
{
// ensure that we have a valid object using the correct family: correct
// being the same one as our peer uses as we have no other way to
// determine it
m_local.Create(m_peer.GetFamily());
}
WX_SOCKLEN_T lenAddr = m_local.GetLen();
if ( getsockname(m_fd, m_local.GetWritableAddr(), &lenAddr) != 0 )
{