Mara's dad Yes I can ! | Bonjour,
Comme indiqué, je cherche à envoyer un paquet UDP en broadcast.
Tout va bien si la table de routage a une default gateway.
En revanche quand il n'y en a pas, j'ai le message "Network is unreachable"
D'après ce que j'ai lu, c'est normal, mais en même temps bizarre car il me semble que le broadcast n'est pas propagé par les routeurs.
Mon code :
Code :
- bool CUdpSocket::broadcast( unsigned int port, uint8* buffer, unsigned int length )
- {
- int flags = 0;
- int yes = 1;
- struct sockaddr_in addr_out;
- memset( &addr_out, 0, sizeof(addr_out) );
- addr_out.sin_family = AF_INET;
- addr_out.sin_addr.s_addr = INADDR_BROADCAST;
- addr_out.sin_port = htons( static_cast<unsigned short>(port) );
- int ret_code = setsockopt( _socket_id, SOL_SOCKET, SO_BROADCAST, &yes, sizeof(yes) );
- if( ret_code < 0 )
- {
- CSysLog::sysLog (CSysLog::ERR, "CUdpSocket::broadcast:setsockopt KO." );
- return false;
- }
- if( static_cast<int>(length) != ( ret_code = sendto( _socket_id, buffer, length, flags, (struct sockaddr*)&addr_out, sizeof(addr_out) ) ) )
- {
- if (ret_code == -1)
- {
- CSysLog::sysLog (CSysLog::ERR, "CUdpSocket::broadcast:sendto" );
- }
- else
- {
- CSysLog::sysLog (CSysLog::ERR, "CUdpSocket::broadcast:sendto: %d caracteres emis au lieu de %d", ret_code, length);
- }
- return false;
- }
- return true;
- }
|
Est-ce que ce que j'essaye de faire est possible ?
Bien sûr, la solution est d'ajouter une default gateway, mais mon soft ne peut pas avoir cette garantie... Message édité par Mara's dad le 07-10-2011 à 11:06:39 ---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
|