Not logged in. · Lost password · Register

Page:  1  2  3  next 
tsunami
skankin´ foot
Avatar
Member since Jan 2003
352 posts
Subject: aufgabe 7
kann mir einer mal verständlich beibringen was diese select-funktion eigentlich genau macht? Sowohl die Übungsfolien als auch die manpage (die bei mir übrigens unter (slelect(2)) und nicht unter (select(3C)) steht - was auch immer 3C bedeuten soll...) überschütten einen nicht gerade mit Infos...  :-/
once you had a dream
of oceans, and sunken cities;
memories of things you´ve never known
and you have never known...   (Michael Stipe)
Yves
Code artist
(Administrator)
Avatar
Member since Nov 2002
3282 posts
Soweit ich die Funktion verstanden hab, kannst du ihr ein paar Sockets oder File Descriptors mitgeben und sie kann die alle kontinuierlich auf Änderung ihres Zustands prüfen. Wenn select() zurückkommt, sollte in den Arrays wohl sowas wie eine Liste von Sockets/FDs stehen, die neue Daten haben oder so in der Art, das lässt die manpage und die Folie leider recht unklar.

Mir war die Funktion dann zu blöd und ich hab's einfach selber gemacht. Du brauchst in dem Fall ja nur eine Schleife, in der du was von den Sockets liest. Nur soll er nicht blockieren, das geht mit einem der recv()-Flags, siehe manpage. Und das immer abwechselnd in ner Schleife - fertig. Funktioniert wunderbar.
Physikalisch gesehen ist ein Quantensprung die kleinstmögliche Zustandsänderung, meist von einem höheren auf ein niedrigeres Niveau.

Komprenu Energiemonitoring-Software | dotforward Webhosting
Mikey
SP Team
Avatar
Member since Nov 2002
641 posts
int  select(int  n,  fd_set  *readfds,  fd_set  *writefds,
       fd_set *exceptfds, struct timeval *timeout);


n: Filedeskriptoren sind ja ints. n ist tatsaechlich der groesste dieser ints+1
also einfach die Zahlenwerte vergleichen den groesseren nehmen und 1 drauf addieren

Die fd_set mit den entsprechenden Makros bearbeiten.

readfds: Zeiger auf ein set in dem alle FDs stehen, die darauf ueberprueft werden sollen ob du von ihnen lesen kannst, ohne dass read blockiert

writefds: wie readfds, nur fuer schreiben

exceptfds: fuer exceptions, braucht ihr nicht

timeout: damit koennt ihr festlegen wie lange select blockiert. Wenn ihr NULL angebt blockiert es bis was passiert ist, das koennt ihr verwenden.

nach dem select stehen in readfds dann nur noch FDs von denen man lesen kann und in writefds nur noch FDs auf die man schreiben kann. Das muesst ihr dann nur mit den Makros pruefen und entsprechend eben vom einen lesen und in den andern schreiben.
urchichako
Ardillo
Member since Apr 2003
256 posts
auf die gefahr hin mit unwissen zu spucken:

ist das normal, dass der xxxproxy.inf... zum testen von meinem rechner daheim net funzt???

ich hab das po_fo über putty von daheim gemacht und auf dem unirechner gestartet, aber es tut sich nix wenn ich daheim als proxy
den unirechner mit meiner portnummer angeb.

is des falsch oda kann ich mit sicherheit sagen dass mein prog falsch is???
Those who find ugly meanings in beautiful things are corrupt without being charming. This is a fault.
Those who find beautiful meanings in beautiful things are the cultivated. For these there is hope.
urchichako
Ardillo
Member since Apr 2003
256 posts
ha!
noch ne frage:

kann ein port kann doch nicht für mehrere verbindungen gleichzeitig benutzt werden?!
weil warum soll ich dann das prog forken, wenn dann zwei identische verbindungen entstehen. der zielrechner ist ja immer der selbe. da gibts doch n fehler.

oder1: benutzen alle children den selben filedeskriptor für das ziel???
aber dann kann doch der zielrechner nurnoch schlecht unterscheiden an wen er jetzt was zurücksenden soll???

oder2: leitet jedes child an einen anderen rechner weiter und ich muss für jedes child ne abfrage machen wohin ichs denn weiterleiten soll

???
Those who find ugly meanings in beautiful things are corrupt without being charming. This is a fault.
Those who find beautiful meanings in beautiful things are the cultivated. For these there is hope.
Mikey
SP Team
Avatar
Member since Nov 2002
641 posts
1. Doch das geht. Schreibe diesen Post gerade auf diese Weise über einen Forwarder

2. Auf dem Server Port 8080 wird nur eine Verbindung ausgehandelt, die tatsächliche Kommunikation findet dann ja auf einem anderen Port statt, kriegst ja von accept nen neuen socket
Robert
(Administrator)
Avatar
Member since Nov 2002
559 posts
Also ich mag mein Programm jetzt testen, aber check irgendwie nicht so ganz wie...
Ich hab mein pf jetzt hier laufen (mit weiterleitung zum wwwproxy.blabla auf Port 8080) und im Konqueror mich selbst als Proxy eingetragen.
Wenn ich jetzt versuch eine Seite aufzurufen sagt mir mein tolles pf, dass 419 Bytes von mir kamen und weitergeleitet wurden, und dass daraufhin 1173 Bytes zurückgekommen sind (und auch weitergeleitet wurden...)

Im Konqueror bekomme ich dann diese Meldung:

ERROR

The requested URL could not be retrieved

 While trying to retrieve the URL: http://www.google.de/

The following error was encountered:

Access Denied.

Access control configuration prevents your request from being allowed at this time. Please contact your service provider if you feel this is incorrect.

Your cache administrator is webmaster@cip.informatik.uni-erlangen.de.

Generated Sun, 11 Jan 2004 22:44:44 GMT by wwwproxy.informatik.uni-erlangen.de (Squid/2.4.STABLE6)

Aber da steht ja immerhin schonmal was vom wwwproxy, also so richtig falsch bin ich schonmal nicht  :-D

Kann mir mal einer erklären, was da los ist, und wo ich den Fehler am besten suche?
Ummm, yeah. We couldn't run an ad that said no Portuguese, but ummm... no Portuguese!
frahi
Avatar
Member since Nov 2002
777 posts
Der Proxy laesst nur Verbindungen von innerhalb des Uninetzes zu, d.h. der PC, auf dem der portforward laeufft muss auch in der Uni, also genauer im cip halt stehen.
Die Tatsache, dass du schon die somit korrekte Fehlermeldung vom proxy bekommst, ist doch schonmal net schlecht. Versuch einfach mal das Programm in der Uni auszufuehren.
Robert
(Administrator)
Avatar
Member since Nov 2002
559 posts
Excellent...  :cool:

Danke!
Ummm, yeah. We couldn't run an ad that said no Portuguese, but ummm... no Portuguese!
Steppenwolf
Schläfer
Avatar
Member since Nov 2002
1535 posts
ich versteh noch nicht so ganz, wofuer man das braucht, dass man mehrere connections entgegennehmen lassen soll.
koennte jemand vielleicht ein kleines szenario beschreiben, bei dem man das braucht und wo dann welcher socket rumgammelt?
Erik
Member since Jan 2003
424 posts
@Steppenwolf:
Da wäre als Beispiel ein Webserver. Wenn der nur mit port 80 laufen würden, dann wäre nach einem Benutzer schluss. Um 1000 Leute gleichzeitig zu bedienen bräuchte mal also 1000 (virtuelle-)  Rechner mit einer eigenen IP Adresse die jedesmal nur einen Benutzer auf port 80 versorgen.
Geschickter ist es dann auf port 80 Anfragen entgegenzunehmen und dann einen neuen port auszuhandeln auf dem dann kommuniziert wird. Aber irgendwohin müssen ja die Anfragen gestellt werden und darum bedarf es einen festen Port.
Das Programm forkt dann und hat für jeden Benutzer einen eigenen Prozess.

Der Child Prozess erbt alle offenen Verbindungen (die von port 80 aus dem Beispiel wurde ja an eine höhere Nummer weitergeleitet) und der Elternprozess resetet sich und lauscht wieder an port 80. Der Mechanismus ist also:
-an festem port hören
-bei connect neuen port aushandeln
-mit dem neuen port forken und das kind die verbindung aufrecht erhalten lassen
-elternprozess wieder an festem port lauschen lassen
urchichako
Ardillo
Member since Apr 2003
256 posts
das klingt für mich alles n bisschen nach cryptosuaheli! :#:

sollte doch lieber taxifahren :-/  :-/
Those who find ugly meanings in beautiful things are corrupt without being charming. This is a fault.
Those who find beautiful meanings in beautiful things are the cultivated. For these there is hope.
Drager
Avatar
Member since Jan 2003
306 posts
tag

ich hab mich auch mal an die aufgabe gemacht, und funkt schon ganz gut , bis auf grössere bilder etc die läd er einfach nicht (auch wenn ich die forward funktion nehm die gegeben ist...) hatte jemand das gleiche problem und kann mir hier weiterhelfen?

achso und ist es normal das ich beim laden einer homepage öfters von server disconnected werde? und immer mal wieder connecten muss ?

danke



Drager
Wer nichts weiss, muss alles glauben.
This post was edited on 2004-01-12, 23:02 by Drager.
Mäxle2
MS-Pinguin Schizophrener
Avatar
Member since Nov 2002
267 posts
Kann mir jemand erklären warum mein Browser die Daten die er von dem port_forward Programm bekommt immer speichern möchte und sie nicht alls normale Website öffnet?

"Die Datei "" ist vom Typ application/octet-strem und Mozilla weiß nicht, wie dieser Typ behandelt werden soll... "
"Die Majorität der Dummen ist unüberwindbar und für alle Zeiten gesichert." (Albert Einstein)
This post was edited on 2004-01-14, 00:31 by Mäxle2.
elzo
Member since Nov 2002
46 posts
@Mäxle:

hatte das gleiche Problem mit mozilla.
Bei mir lag's dadran, dass ich in in der forward.c mit "write" den ganzen buffer in den jw. socket geschrieben hab, man darf aber nur soviele Zeichen reinschreiben, wie man auch wirklich eingelesen hat.
Close Smaller – Larger + Reply to this post:
Verification code: VeriCode Please enter the word from the image into the text field below. (Type the letters only, lower case is okay.)
Smileys: :-) ;-) :-D :-p :blush: :cool: :rolleyes: :huh: :-/ <_< :-( :'( :#: :scared: 8-( :nuts: :-O
Special characters:
Page:  1  2  3  next 
Go to forum
Datenschutz | Kontakt
Powered by the Unclassified NewsBoard software, 20150713-dev, © 2003-2011 by Yves Goergen