[c] server multithreaded
-
pegasus_1987
- Scoppiettante Seguace

- Messaggi: 314
- Iscrizione: mercoledì 25 ottobre 2006, 4:40
[c] server multithreaded
salve,
qualcuno ha un esempio di server multithreaded AF_UNIX??...
qualcuno ha un esempio di server multithreaded AF_UNIX??...
Ultima modifica di pegasus_1987 il giovedì 14 maggio 2009, 11:38, modificato 1 volta in totale.
Re: [c] server multithreaded
Ah ah...pegasus_1987 ha scritto: salve,
qualcuno ha un esempio di server multithreaded AF_UNIX??...
Visto il nome (...1987) e il periodo scommetto che frequenti ingegneria e in particolare un corso di reti di calcolatori :P
In tal caso ecco un TCP Server Concorrente (forkato) direttamente dalle slide di quando ho seguito il corso:
Codice: Seleziona tutto
#include
#include
#include
#include
#include
#include
#include
#define SERV_TCP_PORT 6000
int main(int argc, char *argv[]) {
int sockfd, newsockfd, clilen, childpid, tmp;
struct sockaddr_in cli_addr, serv_addr;
sockfd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (sockfd < 0) {
err_dump("server: can't open socket");
}
bzero((char *) &serv_addr, sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = INADDR_ANY;
serv_addr.sin_port = htons(SERV_TCP_PORT);
tmp = bind(sockfd, (struct sockaddr*) &serv_addr,
sizeof(serv_addr));
if (tmp < 0) {
err_dump("server: can't bind local socket");
}
listen(sockfd, 5);
for (;;) {
clilen = sizeof(cli_addr);
newsockfd = accept(sockfd, (struct sockaddr*) &cli_addr, &clilen);
if (newsockfd < 0) {
err_dump ("server: accept error");
}
str_echo(newsockfd);
close(newsockfd);
}
}
Ultima modifica di Zoff il giovedì 14 maggio 2009, 12:22, modificato 1 volta in totale.
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
-
pegasus_1987
- Scoppiettante Seguace

- Messaggi: 314
- Iscrizione: mercoledì 25 ottobre 2006, 4:40
Re: [c] server multithreaded
A me serviva AF_UNIX per farlo girare in locale..
avevo un'altra domanda..
devo implementare un thread che controlla se un file è stato modificato..non so cm passare i parametri alla pthread_create..e sinceramente non so neanke se posso passare parametri dentro..potete aiutarmi?
avevo un'altra domanda..
devo implementare un thread che controlla se un file è stato modificato..non so cm passare i parametri alla pthread_create..e sinceramente non so neanke se posso passare parametri dentro..potete aiutarmi?
Codice: Seleziona tutto
--altro codice--
struct file_t* args;
args=(struct file_t*)malloc(sizeof(struct file_t));
args->path=(char*)malloc(sizeof(char)*UNIX_PATH_MAX);
strcpy(args->path,PATHSERV);
args->lastModified=lastModified;
args->r=r;
pthread_create(&tid,NULL,&writer,&args);
--altro codice --
--codice thread--
int writer(file_t* args){
FILE* filePermessi;
struct stat infoFile;
nodo_t* p;
if (stat(args->path,&infoFile)== -1){printf("Errore writer \n"); return -1;}
if (args->lastModified!=(infoFile.st_mtime)){
p=&args->r;
freeTree(p);
filePermessi=fopen(args->path,"r");
if (filePermessi==NULL) {perror("Errore apertura file"); return -1;}
if(loadPerm(filePermessi,args->r)<0){printf("Errore loadperm"); return -1;}
args->lastModified=infoFile.st_mtime;
}
return 0;
}
Re: [c] server multithreaded
In caso di multithreading il passaggio di messaggi può essere fatto tramite ad esempio un pipeline...pegasus_1987 ha scritto: A me serviva AF_UNIX per farlo girare in locale..
avevo un'altra domanda..
devo implementare un thread che controlla se un file è stato modificato..non so cm passare i parametri alla pthread_create..e sinceramente non so neanke se posso passare parametri dentro..potete aiutarmi?Codice: Seleziona tutto
--altro codice-- struct file_t* args; args=(struct file_t*)malloc(sizeof(struct file_t)); args->path=(char*)malloc(sizeof(char)*UNIX_PATH_MAX); strcpy(args->path,PATHSERV); args->lastModified=lastModified; args->r=r; pthread_create(&tid,NULL,&writer,&args); --altro codice -- --codice thread-- int writer(file_t* args){ FILE* filePermessi; struct stat infoFile; nodo_t* p; if (stat(args->path,&infoFile)== -1){printf("Errore writer \n"); return -1;} if (args->lastModified!=(infoFile.st_mtime)){ p=&args->r; freeTree(p); filePermessi=fopen(args->path,"r"); if (filePermessi==NULL) {perror("Errore apertura file"); return -1;} if(loadPerm(filePermessi,args->r)<0){printf("Errore loadperm"); return -1;} args->lastModified=infoFile.st_mtime; } return 0; }
Ma questo è un altro problema... Meglio se apri un altra discussione...
Per il server mi sono accorto dell'errore solo dopo aver inviato, sorry
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
-
theshade14
- Prode Principiante
- Messaggi: 47
- Iscrizione: giovedì 27 settembre 2007, 11:14
Re: [c] server multithreaded
per i miei ricordi riguardo la creazione dei thread in C si posso passare gli argomenti al nuovo thread mediante puntatori, però è una pratica sconsigliata in quanto ti espone ad un exploit.
Codice: Seleziona tutto
pthread_t th;
int x;
pthread_create(&th,NULL,(void*)nomefunzione,&x);
Re: [c] server multithreaded
@theshade14
che tipo di exploit? non ne ho mai sentito parlare
che tipo di exploit? non ne ho mai sentito parlare
http://petition.stopsoftwarepatents.eu/
d95555c36aeeee715c0a34ce1e4dd713
d95555c36aeeee715c0a34ce1e4dd713
-
theshade14
- Prode Principiante
- Messaggi: 47
- Iscrizione: giovedì 27 settembre 2007, 11:14
Re: [c] server multithreaded
allora non essendo un esperto programmatore non so dirti... però ricordo benissimo che durante un compito di sistemi operativi un assistente mi disse che passare per riferimento una variabile al nuovo thread era rischioso perchè poteva essere passata una locazione di memoria qualsiasi... a questa affermazione io chiesi "mediante un exploit??" e lui mi rispose si... mi disp ma non so dirti di più. Ritenevo doveroso riferirlo insieme al codice.
Re: [c] server multithreaded
Non e` pericoloso passare per indirizzo una variabile ad un thread -per lo meno, non lo e` piu` che usare in genere i puntatori-. Dipende dal codice.theshade14 ha scritto: allora non essendo un esperto programmatore non so dirti... però ricordo benissimo che durante un compito di sistemi operativi un assistente mi disse che passare per riferimento una variabile al nuovo thread era rischioso perchè poteva essere passata una locazione di memoria qualsiasi... a questa affermazione io chiesi "mediante un exploit??" e lui mi rispose si... mi disp ma non so dirti di più. Ritenevo doveroso riferirlo insieme al codice.
Penso che l'assistente intendesse che si rischiano riferimenti pendenti e quindi eventuali segmentation fault.
In tal caso, direi che e` fuori luogo parlare di exploit.
Chi c’è in linea
Visualizzano questa sezione: 0 utenti iscritti e 3 ospiti

