2012-05-16 19 views
7

Durante il debug della nostra applicazione in ambiente Linux possiamo osservare che alcuni eventi - POLLHUP|POLLIN si verificano solo su linux. La nostra applicazione utilizza prese unix. Quando facciamo:implementazione di sondaggi su linux e implementazione sondaggio su solaris

ret = poll(xpoll->pfd, xpoll->pfd_count, xpoll_timeout); 

strace mostra:

poll([{fd=4, events=POLLIN|POLLPRI|POLLERR|POLLHUP}, {fd=6, events=POLLIN|POLLPRI|POLLERR|POLLHUP}, {fd=7, events=POLLIN|POLLPRI|POLLERR|POLLHUP}], 3, 16) = 1 
([{fd=7, revents=POLLIN|POLLHUP}]) 

Questa situazione non si verifica in Solaris (stessa applicazione): Struss mostra:

2463/3:     fd=569 ev=POLLIN|POLLPRI|POLLERR|POLLHUP rev=0 
2463/3:     fd=639 ev=POLLIN|POLLPRI|POLLERR|POLLHUP rev=0 
2463/3:     fd=631 ev=POLLIN|POLLPRI|POLLERR|POLLHUP rev=POLLIN 
2463/3:     fd=1160 ev=POLLIN|POLLPRI|POLLERR|POLLHUP rev=0 
2463/3:     fd=400 ev=POLLIN|POLLPRI|POLLERR|POLLHUP rev=0 

Può cortesemente spiegare che cosa è la differenza tra sondaggio in solaris e sondaggio in liunx? Thx in anticipo per tutte le risposte.

+0

Linux restituisce POLLIN (dati da leggere) anche in caso di EOF. Linux non c'è nessun flag POLLEOF. Questo è tutto ciò che mi riguarda adesso. – B4NZ41

risposta

3

Entrambi, Linux e Solaris, non sono riusciti a impostare POLLIN per EOF su alcuni tipi di file, in particolare sui tubi. Una soluzione alternativa consisteva nel controllare POLLHUP e POLLIN insieme. Per quanto ne so, gli sviluppatori di nucleo di Linux lo hanno mantenuto in questo modo (probabilmente inteso), mentre i compagni di Solaris hanno modificato tale comportamento per utilizzare POLLIN POLLEOF.

Tuttavia, questo non dovrebbe rappresentare un problema per l'applicazione: per aumentare la portabilità di un'applicazione, si controllerebbe sempre entrambi i flag nella maschera bit.

Cheers!

+0

BTW, poiché POLLEOF non è una parte di POSIX - forse è un alias per un'altra macro (-combinazione) come POLLIN o POLLIN | POLLHUP? Devo controllare che ... – mjhennig

Problemi correlati