[Interest] QUdpSocket and Binding

Jean-Nicolas Artaud jeannicolasartaud at gmail.com
Thu Oct 30 15:43:23 CET 2014


Hello folk !

I've got a trouble I don't understand : the bind on the QUdpSocket doesn't
conplains but I don't receive anything if I put my IP Address in
_bindAddress. So the binding on AnyIPv4 works but not for adresses.

(the soft I'm working on is multi OS (Linux/Windows) I develop and test on
Linux and I can answer your questions as fast as possible, and even try
your suggestions).

Here is my code simplified (I've got log for each failed line, but what
ever) :

    QUdpSocket* socket = new QUdpSocket(this);


    // Use a regular expression to parse the adress

    QRegularExpression re( "^(\\d+.\\d+.\\d+.\\d+):(\\d+)$");

    QRegularExpressionMatch match = re.match(address);

    if ( !match.hasMatch() )

    {

        qb::warn( QString("Invalid address %1").arg(address) );

        return 0;

    }


    // Get the bind address

    QHostAddress bindAddr( _bindAddress );

	if ( _bindAddress.isEmpty() )

	{

		qb::inform("Use default bind address");

		bindAddr = QHostAddress::AnyIPv4;

	}

	else

	{

		qb::inform("Bind address: " + bindAddr.toString());

	}


    // Bind to the port

    int port = match.captured(2).toInt();

    if (!socket->bind( bindAddr , port, QAbstractSocket::ShareAddress
| QAbstractSocket::ReuseAddressHint ))

    {

        qb::warn( QString("Not possible to bind to %1:%2 :
%3").arg(_bindAddress).arg(port).arg(socket->errorString()) );

        return 0;

    }

	else

	{

		qb::inform( QString("Local address: %1, Peer address: %2, Peer port:
%3, Peer name: %4.").arg(socket->localAddress().toString()).arg(socket->peerAddress().toString()).arg(socket->peerPort()).arg(socket->peerName())
);

	}


    // Join the multicast group

    QString ipAddress = match.captured(1);

    if (!socket->joinMulticastGroup( QHostAddress(ipAddress) ))

    {

        qb::warn( QString("Cannot join %1 :
%2").arg(ipAddress).arg(socket->errorString()) );

        return 0;

    }


    // IMPORTANT : set the maximum receive buffer size

    // Allow to reach high throughput (4Mb/s) without too many lost packets

    // Default value does not seem to be good enough

    setsockopt(socket->socketDescriptor(), SOL_SOCKET, SO_RCVBUF,
(const char*) &_socketBufferSize, sizeof(int));



    qb::inform( QString("Start listening to %1:%2").arg(ipAddress).arg(port) );


    connect(socket, SIGNAL(readyRead()), this, SLOT(readPendingDatagrams()));

    connect(socket, SIGNAL(error(QAbstractSocket::SocketError)), this,
SLOT(onSocketError(QAbstractSocket::SocketError)));





Many thanks in advance

-- 
Jean-Nicolas
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/interest/attachments/20141030/36e9796f/attachment.html>


More information about the Interest mailing list