PDA

View Full Version : sockets ile und close



kuempi von stein
12-07-05, 14:04
hello @all,

habe aktuell ein Programm in der Mache, welches nach jedem gelesenen Satz (read socket) eine Antwort schickt (write socket) und danach die Verbindung erstmal wieder schliesst (close socket).
Die Verbindung wird grundsätzlich über VPN hergestellt, so dass vermutlich gewährleistet ist, dass keine anderen als erwartete Sätze und Clients anklopfen.
Anzahl der anklopfenden Sätze variiert sehr (manchmal nur ein Satz, manchmal mehrere hintereinander).
Der Client bemängelt nun zu Recht die ewige closerei und den erneuten Aufbau (make socket, listen socket, accept socket, read socket, close socket) und spricht in diesem Zusammenhang von unnötigen Ressourcenverbrauch und Zeitverlust.
Ein komplettes Redesign möchte ich mir aber sparen (Motto: never change a running system).
Ich möchte deshalb um den Kernpunkt eine DO-Schleife legen.
Kann ich diese nun VOR dem 'accept socket' legen oder ist es angebracht den Loop erst VOR dem 'read socket' zu platzieren?
Und wie stark ist die Systembelastung durch diesen Loop? Kann ich diesen Punkt vernachlässigen?
Um den Loop abzubrechen denke ich an eine Art Zeitzähler, der nach 5 oder 10 Minuten Inaktivität 'close socket' durchführt und das ganze Prozedere neu starten lässt.
Ist das gefahrlos möglich?

Mag sich mal bitte jemand dazu äussern?

Danke

kuempi

Rincewind
12-07-05, 14:23
Hi,

Ist es immer wieder derselbe Client der sich mit deinem Programm verbindet oder sind es verschiedene ?

Wenn die Verbindung nicht immer aktiv bleibt würde ich das accept mit in die Schleife nehmen, dann können sich mehrere auch gleichzeitig mit dem Programm connecten.(also auch der eine abgestürzte und der neuverbundene)

Gruss

Rince

kuempi von stein
12-07-05, 14:29
Hi,

Ist es immer wieder derselbe Client der sich mit deinem Programm verbindet oder sind es verschiedene ?

Wenn die Verbindung nicht immer aktiv bleibt würde ich das accept mit in die Schleife nehmen, dann können sich mehrere auch gleichzeitig mit dem Programm connecten.(also auch der eine abgestürzte und der neuverbundene)

Gruss

Rincehello,

es ist immer derselbe client.
von daher tendiere ich persönlich auch dazu, erst VOR dem 'read socket' einzusetzen.
den loop VOR 'accept socket' zu setzen, wäre nur nice gewesen.
ich vermute aber aus der handbuchbeschreibung, dass der socket dabei nicht 'überschrieben' wird, sondern ein neuer angelegt wird und das system dadurch dichtgemacht wird....

gruss

k.

Rincewind
13-07-05, 11:59
Klar, er akzeptiert dann einen neuen Client..

Man muss aber auch beachten, dass die Timeout Zahl nach Abbruch bei einem Programm durchaus länger sein kann.

Achte mal auf WRKTCPSTS *CNN mit dem entsprechenden Port.
Es kann sein dass ein alter abgebrochender client dann deinen server beschäftigt hält, obwohl du das gar nicht mehr willst.

Gruss

Rince

kuempi von stein
14-07-05, 11:06
Klar, er akzeptiert dann einen neuen Client..

Man muss aber auch beachten, dass die Timeout Zahl nach Abbruch bei einem Programm durchaus länger sein kann.

Achte mal auf WRKTCPSTS *CNN mit dem entsprechenden Port.
Es kann sein dass ein alter abgebrochender client dann deinen server beschäftigt hält, obwohl du das gar nicht mehr willst.

Gruss

Rince
mhh...
nach dem xsten anlauf scheint es nun zu funktionieren.
zumindest bleibt das proggi nicht mehr hängen.
der close vom clientsocket mit anschliessenden neu accept verursacht auch keine wartezeit, obwohl ich keine lebensdauer mitgegeben habe.
manchmal findet ein blindes huhn doch noch ein korn.

ich glaube, der tag wird doch noch schön
:)

danke für deine anteilnahme

k.