我对prolog中的错误恢复机制有点不熟悉,所以如果问题看起来很愚蠢,我会提前道歉。 我正在寻找一种方法来正确处理swi-prolog中的SocketError。到目前为止,我只找到了以下代码段:
setup_call_catcher_cleanup(tcp_socket(Socket),
tcp_connect(Socket, Host:Port),
exception(_),
tcp_close_socket(Socket)).
每当拒绝连接时,它会引发相应的异常并执行清理操作,关闭套接字。
问题是,我希望将它嵌入谓词test_socket/3
中,该谓词在连接被拒绝时设置状态代码,而我似乎无法找到这样做的方法。我试过了:
test_socket(Host, Port, Status) :-
setup_call_catcher_cleanup(tcp_socket(Socket),
tcp_connect(Socket, Host:Port),
exception(_),
(tcp_close_socket(Socket), Status = 1).
但这似乎没有诀窍。有什么想法吗?
答案 0 :(得分:0)
参数Cleanup
的目的是执行一些清理操作,然后继续,就好像没有发生这种清理一样。也就是说,异常进一步发展,Status = 1
是多余的。构造不是为了做所有事情。但最重要的是catch/3
,这就是你想要的。
- 假