git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@60567
c3d73ce0-8a6f-49c7-b76d-
6d57e0e08775
#ifdef wxHAS_UNIX_DOMAIN_SOCKETS
void CreateUnix();
#endif // wxHAS_UNIX_DOMAIN_SOCKETS
#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; }
// simple accessors
Family GetFamily() const { return m_family; }
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();
if ( getsockname(m_fd, m_local.GetWritableAddr(), &lenAddr) != 0 )
{
WX_SOCKLEN_T lenAddr = m_local.GetLen();
if ( getsockname(m_fd, m_local.GetWritableAddr(), &lenAddr) != 0 )
{