Hi!
Ich habe eine Frag zu den Sockets in C:
Ich habe mittels fork() einen Kindprozess erstellt, der auf Verbindungsanforderungen über nen Socket wartet. Ich möchte aber den Prozess jederzeit beenden können und so hab ich mir ne Variable reingetan, wenn die einen bestimmten Wert hat, soll sich der Kindprozess beenden. Dazu müsste aber accept() nach einer gewissen Zeit auch ohne Verbindungsanforderung zurückkehren. Geht das?
Oder gibts noch Wege, die accept-Funktion abzubrechen?
Sockets in C: accept() mit timeout
-
- Beiträge: 520
- Registriert: 12.06.2003 23:18:50
- Wohnort: Siegburg
Das ist gut, danke!
Ich bräuchte es aber ein bisschen schneller, vielleicht so auf 250ms genau. alarm() schickt doch ein Signal an den Prozess. Bricht accept() auch ab, wenn ich einfach ein beliebiges Signal selbst vom Elternprozess an das Kind schicke?
[EDIT] Ja, ich brauche das für accept, weil ich eine while-Schleife drum mache und so auf Verbindungen warte.
Ich bräuchte es aber ein bisschen schneller, vielleicht so auf 250ms genau. alarm() schickt doch ein Signal an den Prozess. Bricht accept() auch ab, wenn ich einfach ein beliebiges Signal selbst vom Elternprozess an das Kind schicke?
[EDIT] Ja, ich brauche das für accept, weil ich eine while-Schleife drum mache und so auf Verbindungen warte.
-
- Beiträge: 520
- Registriert: 12.06.2003 23:18:50
- Wohnort: Siegburg
Du kannst natürlich im Elternprozess mit usleep(3) schlafen und dann ein Signal an das Kind schicken. Da Linux aber kein Realtime System ist, kannst du nicht sicher sein, daß du exakt 250 ms Verzögerung bekommst.
Normalerweise wartet man mit listen(2) auf neue Verbindungen. Wenn listen ohne Fehler zurückkehrt, wird die Verbindung mit accept(2) akzeptiert.
Normalerweise wartet man mit listen(2) auf neue Verbindungen. Wenn listen ohne Fehler zurückkehrt, wird die Verbindung mit accept(2) akzeptiert.
Super! Genau das brauch ich. Die Genauigkeit ist egal. Aber eine Sekunde Verzögerung ist einfach zu viel.
In nem Buch von mir (Linux/Unix-Systemprogrammierung) wird so auf Verbindugen gewartet:
Danke!
In nem Buch von mir (Linux/Unix-Systemprogrammierung) wird so auf Verbindugen gewartet:
Code: Alles auswählen
listen(socket, 5);
while( (connected_socket = accept(...)) >= 0)
{
...
}
-
- Beiträge: 520
- Registriert: 12.06.2003 23:18:50
- Wohnort: Siegburg