Prolog中的SocketError处理

时间:2014-12-27 23:06:36

标签: sockets exception swi-prolog

我对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).

但这似乎没有诀窍。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

参数Cleanup的目的是执行一些清理操作,然后继续,就好像没有发生这种清理一样。也就是说,异常进一步发展,Status = 1是多余的。构造不是为了做所有事情。但最重要的是catch/3,这就是你想要的。                      - 假