PDA

Visualizza la versione completa : [C] problemi con winsock


mico90
25-08-2008, 18:10
Ciao,
ho un problema con un programma che sto realizzando; questo software utilizza 2 socket, deve "tenerli d' occhio" perche' appena si presentano dei dati deve essere pronto a riceverli; guardando nella documentazione di winsock ho notato la funzione select(); che mi mantiene il programma in idle senza spreco di risorse quando non ci sono dati da ricevere e quando si presenta qualcosa ad uno dei 2 socket, questa funzione libera il programma e mi da' come output il numero (quantitativo) di socket con dati pronti ad essere letti.

MSDN : The select function returns the total number of socket handles that are ready and contained in the fd_set structures

Il mio problema e' sapere QUALE dei 2 socket presenti nella struttura fd_set ha dei dati pronti per essere letti tramite recv(); e non riesco a capire come fare...


Grazie delle eventuali risposte ! :stordita:

menphisx
25-08-2008, 18:33
Esiste la macro FD_ISSET(int fd, fd_set *set)

:ciauz:

mico90
25-08-2008, 18:35
grazie 1000 !!! mi hai salvato :stordita:


:ciauz:

mico90
28-08-2008, 15:38
Ciao a tutti, ho qualche altra domanda e le pongo qui dato che il post mi sembra abbastanza inerente :


Ho un socket del tipo SOCK_STREAM, quindi i dati vengono trattati come un flusso...
Usando alcuni software come WireShark ( Sniffer ) ho notato che i dati in arrivo vengono visti dei pacchetti, mi chiedo come fare a riconoscere l' inizio o la fine di un pacchetto utilizzando dei dati forniti dalla funzione recv(); , da quel che ho capito infatti se arrivano ( esempio ) 2 pacchetti e solo dopo l' arrivo vado a chiamare la funzione recv() quest' ultima mette in un vettore buffer i 2 pacchetti, uno dietro l' altro.

Ho detto qualcosa di sbagliato ? Consigli su come posso fare ?


Grazie. :ciauz:

menphisx
28-08-2008, 15:44
Devi conoscere il protocollo TCP, e la dimensione di ogni pacchetto.
Poi scrivi una struttura apposita; e leggerai il flusso di byte scrivendolo dentro questa struttura.
Così potrai accedere direttamente ai vari campi del pacchetto TCP.

:ciauz:

menphisx
28-08-2008, 15:48
Dimenticavo, che esistono già delle strutture apposite.
E devi utilizzare i socket RAW.

:ciauz:

mico90
28-08-2008, 15:50
Cerco di studiarmi questo tipo di socket :zizi:

Thanks :ciauz:

menphisx
28-08-2008, 15:51
Guarda qui:
http://www.pluto.it/files/journal/pj0501/sniffing.html

:ciauz:

Loading