[an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] (none) [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] (none) [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive]
 
[an error occurred while processing this directive] [an error occurred while processing this directive]
Skåne Sjælland Linux User Group - http://www.sslug.dk Home   Subscribe   Mail Archive   Forum   Calendar   Search
MhonArc Date: [Date Prev] [Date Index] [Date Next]   Thread: [Date Prev] [Thread Index] [Date Next]   MhonArc
 

Re: [PROGRAMMERING] C++ Socket programmering, client, test af connection



Robert Larsen wrote:

> Det har du ret i men det er jo også ada. Jeg ved ikke om Ada giver dig
> alt hvad der er at læse med et kald til read, men det gør C jo ikke. 

Selects är mappat till select()
Read är mappat till recv()
Lite otydligt av mig att inte nämna det.
Det är alltså c-rutinerna i botten


> Så 
> der vil man skulle fylde sin buffer flere gange, og på et tidspunkt er
> der ikke mere. Det kan du kun opdage ved at læse igen,

rätt, det som exemplet ovan hanterar är så små datamängder
att recv returnerar allt. säg < 400 bytes

> og hvis din socket så blokerer kan det være et problem.

hmm, ja om inte timeout används.

  loop
    select med timeout
    if timeout exit loop
    allokera ny buffer
    recv till buffer
  end loop
  slå ihop buffrar
  gör något med innehållet
  

Ett annat populärt trick (för textprotokoll) är att
definera ett stopptecken, tex newline.

Då vet man att det skall vara ner att läsa så länge inte ett newline
påträffas. bufferten till recv sättes till 1 byte lång.

  loop
     r=recv(buf)
     if r == -1 {error}  
     if r == 0 {hangup}
     if buf == "\r" {do_nothing}
     if buf == "\n" exit loop
     long_buffer = long_buffer + buf
   end loop


  Fördelen med blocking är att det är lätt i samband med multitasking.
  Skapa ett nytt task (tråd) och låt den fylla en buffer, medans
  andra delar av programmet jobbar vidare.


  Men som alltid, så kan man lösa ett problem på många sätt

-- 
/Björn



 
Home   Subscribe   Mail Archive   Index   Calendar   Search

 
 
Questions about the web-pages to <www_admin>. Last modified 2007-09-01, 02:01 CEST [an error occurred while processing this directive]
This page is maintained by [an error occurred while processing this directive]MHonArc [an error occurred while processing this directive] # [an error occurred while processing this directive] *