VError XBsdNetAddr::FromIpAndPort(const VString& inIP, PortNumber inPort)
{
	StTmpErrorContext errCtx;

	VError verr=VE_OK;
	
	if(ConvertFromV4())
		verr=FromIpAndPort(AF_INET, inIP, inPort);
		
	if(verr!=VE_OK && ConvertFromV6())
		verr=FromIpAndPort(AF_INET, inIP, inPort);
		
	if(verr==VE_OK )
		errCtx.Flush();
	
	return verr;
}
	VError Publish()
	{
		StTmpErrorContext errCtx;

#if WITH_DEPRECATED_IPV4_API
		XTCPSock* sock=XTCPSock::NewServerListeningSock(GetAddress(), GetPort(), fBoundSock);
#else
		XTCPSock* sock=XTCPSock::NewServerListeningSock(fAddr, fBoundSock);
#endif
		SetSock(sock);
		
		if(sock!=NULL)
		{
			errCtx.Flush();
			return VE_OK;
		}
		
		return vThrowError(VE_SRVR_FAILED_TO_CREATE_LISTENING_SOCKET);
	}
VError VTCPConnectionListener::StartListening ( )
{
	StTmpErrorContext errCtx;
	
	if ((fSockListener = new VSockListener(fRequestLogger)) == NULL) 

		return VE_MEMORY_FULL;

	VError	vError = VE_OK;

	if ( fCertificatePath. GetLength ( ) > 0 && fKeyPath. GetLength ( ) > 0 )
	{
		char*					szchCert = new char [ fCertificatePath. GetLength ( ) * 2 + 1 ];
		fCertificatePath. ToCString ( szchCert, fCertificatePath. GetLength ( ) * 2 + 1 );
		
		char*					szchKey = new char [ fKeyPath. GetLength ( ) * 2 + 1 ];
		fKeyPath. ToCString ( szchKey, fKeyPath. GetLength ( ) * 2 + 1 );
		
		fSockListener-> SetCertificatePaths ( szchCert, szchKey );
		
		delete [ ] szchCert;
		delete [ ] szchKey;

	} else if (fCertificate.GetLength() > 0 && fKey.GetLength() > 0) {

		vError = fSockListener-> SetKeyAndCertificate(fKey, fCertificate);

	}
	
	if (vError != VE_OK) {

		delete fSockListener;
		fSockListener = NULL;
		return vError;

	}

	VTCPConnectionHandlerFactory*								vtcpCHFactory = NULL;
	std::vector<PortNumber>											vctrPorts;
	std::vector<PortNumber>::iterator								iterPorts;
	std::vector<VTCPConnectionHandlerFactory*>::iterator		iterFactories = fFactories. begin ( );
	while ( iterFactories != fFactories. end ( ) )
	{
		vtcpCHFactory = *iterFactories;
		vError = vtcpCHFactory-> GetPorts ( vctrPorts );
		if ( vError != VE_OK )
			break;
		iterPorts = vctrPorts. begin ( );
		while ( iterPorts != vctrPorts. end ( ) )
		{
			fSockListener-> AddListeningPort ( vtcpCHFactory-> GetIP ( ), *iterPorts, vtcpCHFactory-> IsSSL ( ) );
			iterPorts++;
		}
		vctrPorts. clear ( );
		
		iterFactories++;
	}
	
	if ( vError == VE_OK )
	{
		if ( fSockListener-> StartListening ( ) )
			Run ( );
		else
			vError = ThrowNetError ( VE_SRVR_FAILED_TO_START_LISTENER );
	}
	
	if ( vError != VE_OK )
	{
		DeInit ( );
	}
	else
	{
		errCtx.Flush();
	}
	
	return vError;
}