2016-04-30 10 views
1

Ich möchte überprüfen, ob ein Server zuhört oder nicht und dafür verwende ich den unten gezeigten Code.Kann catch/3 für tcp_connect in Prolog nicht verwenden

:- use_module(library(socket)). 

goal(IP,Port,Sock):- 
    tcp_socket(Sock), 
    tcp_connect(Sock,IP:Port). 

main(IP,Port):- 
    catch(goal(IP,Port,Sock),error(X,Y),writeln('Error')). 

Ich nenne die wichtigsten aus dem Konsolenteil. Ich habe versucht, catch/3 zu verwenden, um den Fehler zu fangen, aber mein Code bleibt immer stecken und ich bekomme Betriebssystemfehler 'swipl. exe funktioniert nicht mehr ' was mich zwingt, die Prolog-Konsole zu schließen. Jede Hilfe wird geschätzt.

+0

Ich habe dies in Debian versucht, mit der neuesten Entwicklungsversion von SWI, und es funktioniert genau wie erwartet. Verwenden Sie auch die neueste Version von SWI-Prolog? – mat

+0

@mat Danke. Es funktionierte mit der neuesten Entwicklungsversion. Ich benutzte die stabile Version 7.2.3. –

+0

Großartig! Bitte poste dies als Antwort und akzeptiere es, um diese Frage als abgeschlossen zu markieren. – mat

Antwort

1

Ich fand die Antwort auf mein Problem. Ich habe stabile Version 7.2.3 verwendet. Die Verwendung der Entwicklungsversion 7.3.2 hat mein Problem gelöst.