[C++] problemi con i thread

di il
2 risposte

[C++] problemi con i thread

Salve a tutti
sto cercando di sviluppare un server concorrente in c++ utilizzando i thread. mi aiutate per favore a capire che cosa non va? non riesco ad individuare l'errore. vi allego il codice, grazie
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <pthread.h>

#define BACKLOG_SIZE 5
#define SRV_PORT 1024

using namespace std;

void *f(void *arg)
{
    cout <<"SERVER: Connessione ricevuta dal client "<<endl;
    //codice da fare eseguire al server per gestire la richiesta da parte dei clients
   // close((int *)arg);
}
int main(void)
{
    int ret, len;

    int sk, cl_sk;
    int optval;
    struct sockaddr_in my_addr, cl_addr;
    char cl_paddr[INET_ADDRSTRLEN];
    uint16_t cl_port;
    pthread_t tid;

    unsigned int msg_len;
    char *msg;


    sk = socket(AF_INET, SOCK_STREAM, 0);
    if(sk == -1){
        cout <<"SERVER: Impossibile creare un nuovo socket"<<endl;
        exit(1);
    }

    /* reuse a TIME_WAIT socket */
    optval = 1;
    ret = setsockopt(sk, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof(optval));
    if(ret == -1){
        cout<<"CLIENT: Error on setting SO_REUSEADDR"<<endl;
        exit(1);
    }

    memset(&my_addr, 0, sizeof(my_addr));
    my_addr.sin_family = AF_INET;
    my_addr.sin_addr.s_addr = htonl(INADDR_ANY);
    my_addr.sin_port = htons(SRV_PORT);

    ret = bind(sk, (struct sockaddr *) &my_addr, sizeof(my_addr));
    if(ret == -1){
        cout <<"SERVER: Errore nella bind "<<endl;
        exit(1);
    }


    ret = listen(sk, BACKLOG_SIZE);
    if(ret == -1){
        cout << "SERVER: Impossibile creare una coda di backlog di "<<BACKLOG_SIZE<< "connessioni"<<endl;
        exit(1);
    }
    cout << "SERVER: in ascolto di connessioni sulla porta "<<SRV_PORT<<endl;

    while(1){


        len = sizeof(cl_addr);
        cl_sk = accept(sk, (struct sockaddr *) &cl_addr, (socklen_t*)&len);
        if(cl_sk == -1){
            cout <<"SERVER: Errore nella accept"<<endl;
            exit(1);
        }
        //inet_ntop(AF_INET, &cl_addr.sin_addr, cl_paddr, sizeof(cl_paddr));
        //cl_port = ntohs(cl_addr.sin_port);
        //cout <<"SERVER: Connessione ricevuta dal client "<<cl_paddr<< " sulla porta " <<cl_port<<endl;
        pthread_create(&tid, NULL, f, (void *) cl_sk);
        pthread_detach(tid);





    }

    close(sk);
    exit(0);
}

2 Risposte

  • Re: [C++] problemi con i thread

    Ciao
    Che errore ti dà?
  • Re: [C++] problemi con i thread

    Ciao scusa mi sono dimenticata di dirvi che ho risolto. in realtà non vi era nessun errore, il fatto è che mi ostinavo a compilare con gcc, mentre bisognava compilare con g++. Adesso è tutto a posto, funziona perfettamente. grazie mille
Devi accedere o registrarti per scrivere nel forum
2 risposte