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:
@@ -166,6 +166,30 @@ public:
|
|||||||
#ifdef wxHAS_UNIX_DOMAIN_SOCKETS
|
#ifdef wxHAS_UNIX_DOMAIN_SOCKETS
|
||||||
void CreateUnix();
|
void CreateUnix();
|
||||||
#endif // wxHAS_UNIX_DOMAIN_SOCKETS
|
#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
|
// simple accessors
|
||||||
Family GetFamily() const { return m_family; }
|
Family GetFamily() const { return m_family; }
|
||||||
|
@@ -364,6 +364,14 @@ void wxSocketImpl::PostCreation()
|
|||||||
|
|
||||||
wxSocketError wxSocketImpl::UpdateLocalAddress()
|
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();
|
WX_SOCKLEN_T lenAddr = m_local.GetLen();
|
||||||
if ( getsockname(m_fd, m_local.GetWritableAddr(), &lenAddr) != 0 )
|
if ( getsockname(m_fd, m_local.GetWritableAddr(), &lenAddr) != 0 )
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user