PDA

View Full Version : [c] message queue...


dnarod
18-10-2007, 01:02
premessa: oggi me ne vado dal lab con tutto funzionante al 100%....stasera mi viene in mente una modifichina a un programma (in unix) e accedo da casa mia con ssh....in pratica ho un client che manda un messaggio su una coda a un server e il server dovrebbe (dopo un po di scazzi) rimandare una risposta...il fatto è che mi si pianta perche il client non riesce nemmeno a fare msgsnd...errno = 22 (non so che errore sia e non so come vederlo), in ogni caso sono andato via dal lab oggi che tutto andava senza alcun problema...spero che qualcuno mi sappia indirizzare perche sto schiumando un attimino :(

ilsensine
18-10-2007, 09:16
Gli errori li stampi in forma "umana" con perror (o strerror/strerror_r).
22 dovrebbe essere "EINVAL", invalid argument. Dalla documentazione di msgsnd:

EINVAL Invalid msqid value, or non-positive mtype value, or invalid
msgsz value (less than 0 or greater than the system value
MSGMAX).

dnarod
18-10-2007, 18:42
grazie!

pero deve essere un problema tricky perche praticamente oggi abbiamo quasi finito tutto il progetto, funzionante al 100% con prove di qualsiasi tipo, e ora che sono appena tornato a casa e mi sono connesso non riesce neanche a mandare un carattere al server (cioe un messaggio composto da un semplice carattere fallisce)...c e proprio qualcosa di marcio che dovro chiedere ai tecnici, perche andare a cercare il problema cosi si schiuma e basta...

dnarod
19-10-2007, 09:16
rigrazie! ho guardato con piu attenzione e il messaggio che mando (una struttura) e piu grande della grandezza massima :O

tnx, mi hai salvato, anche perche non vado d accordo col c e quando ci devo lavorare sopra mi passa ogni voglia e divento stupido...ora il guaio sara convincere i miei compagni che si deve cambiare tutto perche se funziona in lab ci va solo di culo :|

dnarod
19-10-2007, 12:23
chiedo solo un altro po di attenzione, visto che ovviamente non poteva funzionare tutto...
in pratica succede questo:
-il client manda una richiesta al serve tramite una coda di messaggi (manda correttamente e con dati giusti)
-il server la riceve (correttamente e con dati giusti)
-il server prova a creareun thread che soddisfi la richiesta, ma non ce la fa; strerror(errno) mi ritorna "Error 0"

non sapendo come identificare l errore, sono andao a vedere su pthread_create e ce ne sono solo di 3 tipi:
-EAGAIN : massimo numero di threads sforato (non il mio caso, non crea neanche l unico che mi serve)
-EINVAL : attr invalido, io passo NULL e in lab ha sempre funzionato! (poi chi è che non passa NULL?)
-EPERM : problema di permessi...possibile? a naso direi di no visto che crea tutto il resto (code, semafori, shmem, ecc)

sono proprio senza idee...potrei anche mettere degli attributi diversi da NULL (che dovrebbero essere quelli di default), ma a che pro? e come? help!

dnarod
19-10-2007, 12:28
aggiungo: ho appena provato a creare un thread maffo per vedere se funziona; sicuramente non è EPERM perche funziona; quasi sicuramente non è EAGAIN perche come ho gia detto non c e neanche un thread; ergo rimane EINVAL...ma EINVAL de che? che se mi loggo in lab e lo faccio girare non fa una piega? inoltre gli argomenti di pthread_create non sono cosi difficili da capire persino per uno scarpone di c come me :|

ilsensine
19-10-2007, 12:38
man pthread_create

pthread_create non imposta errno in caso di errore; ritorna direttamente...errno:


errno = pthread_create(...);
if (errno!=0)
perror("pthread_create");

dnarod
19-10-2007, 12:43
azz, mea culpa, grazie mille! pero sono triste ugualmente :|

----> pthread_create: unknown Error

inizio a pensare che ci dovro lavorare solo in lab :(

ilsensine
19-10-2007, 12:45
...e stampando il valore di errno ottieni...?

dnarod
19-10-2007, 12:54
azz, lo sconforto porta a non ragionare piu...sry per il reply da noob

vale -1...al che ho provato a googlare un attimo o a riguardare il man ma continuo a non trovarmi...

ilsensine
19-10-2007, 13:24
pthread_create non può ritornare -1.
Su che diavolo di sistema stai provando?

dnarod
19-10-2007, 13:42
sono comodo comodo in windows, in camera mia, e sto usando SSHSecureShellClient-3.2.9, un client ssh...

dnarod
19-10-2007, 14:05
piu che altro, su che diavolo di sistema lavoro in lab (solaris 10) che non fa una piega con alcuni errori...per esempio, la dimensione del nostro messaggio (per la coda) era di piu di 10000, mentre il massimo (dal man) è 8192...cambiato quello infatti da qui non si piantava piu in quel punto!

sto provando a votarmi a qualche santo per il momento, ma senza grossi risultati...

ilsensine
19-10-2007, 15:09
sono comodo comodo in windows, in camera mia, e sto usando SSHSecureShellClient-3.2.9, un client ssh...
Volevo sapere: qual'è il diavolo di sistema che ritorna -1 sulla pthread_create? Windows con cygwin? Chi?

piu che altro, su che diavolo di sistema lavoro in lab (solaris 10) che non fa una piega con alcuni errori...per esempio, la dimensione del nostro messaggio (per la coda) era di piu di 10000, mentre il massimo (dal man) è 8192...cambiato quello infatti da qui non si piantava piu in quel punto!

Se leggi la man page leggila tutta ;)

MSGMAX Maximum size for a message text: 8192 bytes (on Linux, this
limit can be read and modified via /proc/sys/kernel/msgmax).

Il segreto sta quindi in /proc/sys/kernel/msgmax. Evidentemente i default tra solaris e linux sono diversi; su linux puoi elevare la dimensione tramite quel procfile. Su Cygwin ho paura che ti tieni gli 8192...

dnarod
19-10-2007, 15:23
non sono su cygwin (orribbile), altrimenti che mi servirebbe usare ssh per accedere al lab? prima ho provato a installare solaris 10 (ci ha messo qualcosa come 10 ore) ma appena acceso non funziona il mouse usb (c e un known bug, dice che alcuni mouse logitech non funzionano bene) e non so come fixare....al che ho pensato, perche non provare ad usare ssh (che non ho la minima idea di che cosa sia e non lo voglio sapere per il momento, mi serve solo che funzioni):
apro una shell e ci lavoro dentro esattamente come se fossi seduto in lab (ma proprio esattamente, ho persino i miei comandi personalizzati, uso gcc, runno i programmi eccetera)...

evidentemente questo client ssh si interfaccia in qualche modo con il mio login all uni e fa da ponte; è pero alquanto strano, perche posso compilare con gcc (usare un prog dal mio lab) ma spesso e volentieri si incagliano i programmi che scrivo (vedi la faccenda del size massimo per i messaggi della coda, o quest impossibilita nel creare il thread)...è un peccato perche da casa ero molto piu comodo e lavorare su solaris è sempre una fatica mentale non indifferente...

in ogni caso non sono ancora venuto a capo di quell errore, per ora rinuncio, a mente fresca poi ci tornero sopra...