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 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 );
  }
}