Hallo,
Am 23.04.2013 09:29, schrieb Ulrich Eckhardt:
[...]
>
> Wie willst Du pruefen ob der Client noch da ist?
Du bist gut, danke :-)
Das war die richtige Frage.
Annahme:
Dass eine existierende localhost-socket-verbindung einfach abreißt, ohne
dass einer der beiden beteiligten Prozesse verschwindet, halte ich fast
für unmöglich.
Die Situation:
Windows-PC1:
ServiceAnwendung <=socket localhost=> ServerProxy
/SocketServer /SocketClient
<==NamedPipe (wegen Zugriffsrechten) ==>
Windows-PC2:
ClientAnwendung <=socket localhost=> ClientProxy
/SocketClient /SocketServer
ServerProxy startet ServiceAnwendung, d.h. ServerProxy kennt
ProcessInformation von ServiceAnwendung.
ServerProxy könnte parallel zum recv (warten auf Antwort von
ServiceAnwendung) testen, ob der Prozess noch da ist, wenn der
Prozess nicht mehr da ist, müsste recv abgebrochen werden.
ClientProxy startet ClientAnwendung, kennt ProcessInformation, und
könnte parallel zum blockierenden recv schauen, ob ClientAnwendung
noch als Process existiert. Wenn der Prozess nicht mehr da ist, müsste
recv abgebrochen werden.
> Wenn Du nicht einen
> zweiten Kanal zum Client hast, dann sehe ich nur die Methode dem
> TCP-Stack zu vertrauen, also recv() einfach aufzurufen und zu warten. Du
> kannst uebrigens auch ein Event mit dem Socket verbinden, dann kannst Du
Socket mit Event verbinden, geht das ohne .NET und MFC?
Geht das _nur_ mit WinAPI bzw WinSock2?
> mit WaitForMultipleObjects() arbeiten.
Du meinst wahrscheinlich WSAWaitForMultipleEvents(), oder?
>Das erlaubt es Dir einen Timeout
>zu definieren oder ein zweites Event zum manuellen Abbruch zu setzen.
Werde ich mir mal genauer ansehen.
> Ich glaube der Ansatz mit dem zweiten Thread und den damit verbundenen
> Problemen kannst Du vermeiden.
Wäre besser und übersichtlicher :-)
>
> Viel Erfolg!
Danke,
Gruß Robert