Toon posts:

[Linux C]select (opnieuw) en wat andere vragen

Pagina: 1
Acties:

Verwijderd

Topicstarter
In vervolg op [rml][ Linux C] Raar gedrag select?[/rml]/ een paar nieuwe vragen:
'select' onder RH7.2 (geen patches/updates) lijkt zich anders te gedragen dan onder RH7.0 (ook geen patches/updates)
In het eerst geval blijft select aangeven dat de socket readable is, in het tweede geval niet (dus slechts een keer). Helaas is het niet 100% betrouwbaar te testen omdat ik met RH7.0 niet de beschikking heb over de apparatuur die getest moet worden; in dat geval simuleer ik met een zelfgemaakte server op localhost.

Is dit bekend? Zoeken op het internet levert niks op (misschien omdat ik niet weet waarnaar ik in dat geval moet zoeken)? Ligt dit aan de gebruikte lib, de compiler versie of aan de kernel (weet zo niet of deze laatste anders is).

Verder:
1) Bestaat er een #define die aangeeft welk OS ik gebruik en welke versie.
2) Hoe vind ik runtime dezelfde informatie.

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 23-08 16:32
Ik begrijp dat er een probleem is als er een timeout ontstaat.

Nu heb ik dit:
On Linux, timeout is modified to reflect the amount of time not slept; most other implementations do not do this. This causes problems both when Linux code which reads timeout is ported to other operating systems, and when code is ported to Linux that reuses a struct timeval for multiple selects in a loop without reinitializing it. Consider timeout to be undefined after select returns.
uit de manpage van select gehaald. Is dit jouw probleem ?

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


Verwijderd

Topicstarter
Nee, timeout is (bij mijn weten) niet het probleem. De timeout waarde wordt iedere keer opnieuw gezet aan het begin van de while-loop. Als de verbinding verbroken wordt krijg ik in RH7.0 maar een (1) keer dat select terugkeert met een readable file descriptor, in RH7.2 krijg ik dit in een eindeloze loop.

De oplossing nu is om iedere keer opnieuw te proberen te verbinden; in RH7.0 zorgt dit ervoor dat select nu iedere keer een readable socket teruggeeft.