Salux !
Je fais un petit thread d'écoute, donc j'ai deux fonctions :
void listener_start(int port) qui va initialiser tout le bouzin pour écouter le port adéquat
void listener_loop(void* data) pour la boucle d'écoute.
L'écoute se fait sur la socket insock, qui est initialisée dans listener_start. J'ai d'abord fait des tests sans les threads, càd listener_start qui appelle listener_loop : tout c'est passé nickel.
Ensuite j'ai mis à la fin de listener_start :
pthread_create( &listenerthread, NULL, listener_loop, NULL );
et puis plus rien !
La fonction accept plante lamentablement et crashe l'application, j'ai pas trop compris pourquoi
Code de listener_loop :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| void* listener_loop( void* data )
{
if( listen( insocket, 1 ) == -1 )
{
cout << "Unable to listen\n";
return NULL;
}
cout << "Listening\n";
while( state > 0 )
{
csocket = accept( insocket, (sockaddr*) &csin, (socklen_t*) &sinsize );
if( csocket == -1 )
{
cout << "Error while establishing an incoming connection\n";
continue;
}
// processing incoming message
char buffer[1024];
int n=0;
if( ( n = recv( csocket, buffer, sizeof( buffer ) - 1, 0 ) ) < 0 )
{
cout << "Error while incoming message\n";
continue;
}
buffer[n] = '\0';
cout << "Incomming message : " << buffer << endl;
process_message( buffer );
close( csocket );
}
} |
Partager