[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: [Fwd: [CPROG] lseek funktionaliitet på ensocket.]



Hej,

  Article: <sslug@sslug>
  Date:    Thu, 10 Jun 1999 08:57:47 +0200
  Author:  Carsten Svaneborg <sslug@sslug>

> 
> Hvis du vil læse fra en socket kan du checke med select() om der
> er data der venter, på den måde undgår du at programmet står og
> venter (crasher) i en read() fordi der aldrig kommer data.
> (ref. nonblocking sockets)  Hvis select() returnere at der er data,
> så kan du læse bare læse dem alle til en stor buffer.
> 

Det blir aldrig något problem för det kommer garanterat data (förr
eller senare :) ). Men jag kommer använda select för timeout kontrollen.

>> write(socket_fd, buffer, sizeof(buffer));
> sizeof(buffer)? Hvis du taler med en tekst baseret protocol skal det
> være strlen(buffer), men jeg regner ikke med at det har noget med
> sagen at gøre.
> 
  
Jag skrev fel här i mitt exempel.

> > lseek(socket_fd, 0, SEEK_END);
> Jeg ved ikke om man kan lave en lseek på en socket, men med et loop
> af select's og read's kan du også flushe bufferen.
> 

lseek fungerar inte på pipes eller sockets.

> Problemet er jo at det kan være at serveren i den anden ende ikke
> har fået sendt data før lseek kaldes, derfor kan der stadig være
> data på socketen, når du kommer til den næste read. Du kunne lave
> en sleep før lseek, og håbe på at det klarer problemet for det meste,
> men på bekostning af ventetid, og problemet kan stadig opstå.
> 

se ovan.

> Det smarteste er nok at lave en protokol hvormed de to servere
> kan snakke med hinanden, hvor det er klart fra protokollen hvem
> der har ordet. Og du derfor kan flush socket data når du ved at
> du har ordet. Dvs. du må wrappe dine binære data i blokke, og så
> sende noget data før og efter blokkene, der fortæller om serveren
> i den anden ende er færdig med at sende sine data, eller der
> kommer mere.
> 
> Hvad skal programmet kunne?

Min klient skall kommunicera med en server som efter varje write() ger
ifrån sig ett meddelande om dess status (sifferkoder), detta kan vara
multipla rader med varierande längd. Jag vill bara läsa de första x
antalet byte från detta meddelande och sen hoppa till SEEK_END för att
spara tid (som lseek(file_fd, 0 SEEK_END) på en file descriptor).


Hälsn,
Magnus.




--
Magnus Sjögren <sslug@sslug>




 
Home   Subscribe   Mail Archive   Index   Calendar   Search

 
 
Questions about the web-pages to <www_admin>. Last modified 2005-08-10, 20:07 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] *