Pages: [1]   Go Down
Print
Author Topic: send/recv vs write/read  (Read 2145 times)
0 Members e 1 Utente non registrato stanno visualizzando questa discussione.
alex180788
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 422


« on: 29-09-2010, 15:40:22 »

mi è sorto un dubbio:
quando usare read invece di recv (o viceversa)  e quando usare write invece di send(o viceversa) Huh?

il fatto che la connessione sia di tipo SOCK_STREAM oppure SOCK_DGRAM non c'entra perchè negli esempi del prof usa send e recv sia con stream sia con dgram
Logged

Codice etico e di pratica professionale dello sviluppo software:
..
..
7. Colleghi. Gli sviluppatori software devono essere leali e di supporto nei confronti dei loro colleghi.
...
ɹǝǝuıƃuǝsɹǝʌǝɹ
Administrator
God of the Forum
*****
Offline Offline

Gender: Male
Posts: 4.474


Più grande è la lotta, e più è glorioso il trionfo


WWW
« Reply #1 on: 29-09-2010, 16:39:27 »

read/write sono chiamate che operano su generici descrittori di file e danno poche informazioni sul tipo di sorgente/destinazione dei dati.

send/recv sono chiamate destinate a operare solo su socket, che sono un tipo particolare di descrittore, non uno generico.

Logged

La grande marcia della distruzione mentale proseguirà. Tutto verrà negato. Tutto diventerà un credo. È un atteggiamento ragionevole negare l'esistenza delle pietre sulla strada; sarà un dogma religioso affermarla. È una tesi razionale pensare di vivere tutti in un sogno; sarà un esempio di saggezza mistica affermare che siamo tutti svegli. Accenderemo fuochi per testimoniare che due più due fa quattro. Sguaineremo spade per dimostrare che le foglie sono verdi in estate. Non ci resterà quindi che difendere non solo le incredibili virtù e saggezze della vita umana, ma qualcosa di ancora più incredibile: questo immenso, impossibile universo che ci guarda dritto negli occhi. Combatteremo per i prodigi visibili come se fossero invisibili. Guarderemo l'erba e i cieli impossibili con uno strano coraggio. Saremo tra coloro che hanno visto eppure hanno creduto.

In tutto, amare e servire.

  
                            ن                           
I can deal with ads,
I can deal with buffer,
but when ads buffer
I suffer...

...nutrimi, o Signore, "con il pane delle lacrime; dammi, nelle lacrime, copiosa bevanda...

   YouTube 9GAG    anobii  S  Steam T.B.o.I. Wiki [univ] Lezioni private  ʼ  Albo d'Ateneo Unicode 3.0.1
Usa "Search" prima di aprire un post - Scrivi sempre nella sezione giusta - Non spammare - Rispetta gli altri utenti - E ricorda di seguire il Regolamento
alex180788
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 422


« Reply #2 on: 29-09-2010, 16:48:49 »

intanto ti ringrazio della risposta molto chiara, ma io volevo sapere da un punto di vista pratico che differenza c'è?
ci sono casi in cui conviene usare uno piuttosto che l'altro?
Logged

Codice etico e di pratica professionale dello sviluppo software:
..
..
7. Colleghi. Gli sviluppatori software devono essere leali e di supporto nei confronti dei loro colleghi.
...
shiny
Forumista
***
Offline Offline

Posts: 810



WWW
« Reply #3 on: 29-09-2010, 23:26:39 »

che io ricordi nei programmi di esempio del prof le chiamate send/recv erano usate per socket connection-less mentre le read/write per socket con connessione. Se hai ancora dubbi prova a leggere il man. 

EDIT:  prima di postare comunque avresti fatto prima a mettere su google "send/recv vs read/write"... ci sono dei buoni link che spiegano le differenze...
« Last Edit: 29-09-2010, 23:32:27 by shiny » Logged
alex180788
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 422


« Reply #4 on: 30-09-2010, 07:50:46 »

anche io la pensavo cosi, ma tra gli esempi del prof send/recv vengono usate sia per socket connection-less sia per socket connesse

sndrcvConnClntStream.c          client che usa send/recv con stream
sndrcvClessClnt.c                     client socket che usa sendto/recvfrom connectionless (datagram)
sndrcvConnClnt.c                     client come quella connectionless (quella sopra) usa connect() con send() e recv()

in quella dove usa sendto e recvfrom aggiunge questo comando tra la sendto e la recvfrom
memset(&server_addr, 0, s_addr_len);
questo non so esattamente cosa significa ma nei commenti c'è scritto di fare attenzione a questa differenza, dovrebbe settare a zero l'indirizzo del server e subito dopo lo ottiene dalla recvfrom??
Logged

Codice etico e di pratica professionale dello sviluppo software:
..
..
7. Colleghi. Gli sviluppatori software devono essere leali e di supporto nei confronti dei loro colleghi.
...
Pages: [1]   Go Up
Print
Jump to: