gpt4 book ai didi

sockets - OpenVMS 下 SAS 中套接字的错误处理

转载 作者:行者123 更新时间:2023-12-02 21:31:20 24 4
gpt4 key购买 nike

我在 OpenVMS 上使用 SAS 9.2 通过文件名语句指定的套接字连接到外部数据源:

filename extsrc SOCKET "extserver:port" recfm=v;

data foo;
infile extsrc;
input;
.... some statements to read stuff ...;
run;

这在 99% 的情况下都有效(应该如此)。然而,有时本应监听远程端口的程序却没有监听。目前,这会导致程序退出并出现错误:

Error: Connection refused.

之后我们再试一次,通常会成功。然而,这变得很乏味,所以我想检测程序中的这个错误并在那里处理它。有谁知道在 SAS 中检测此类错误的方法吗?

我尝试使用 fileref() 函数检查 fileref extsrc 的有效性,但这只是返回 -20005 ,这意味着 fileref 已分配但不指向本地文件(这是正确的)。仅当我在数据步骤中使用 fileref 时,该错误才会变得明显,因此我想执行以下操作:

data _null_;
rc=infile extsrc;
if rc=0 then do;
//whatever I want to do;
end;
else do;
//throw some error and try again later;
end;
run;

[更新1]我正在尝试下面的建议,但实际上是heisenbug时尚这个问题在过去几天里一直没有出现,所以我不确定最终的解决方案是什么。[/更新1]

[更新2]错误终于又出现了。根据 cmjohns 的回答,发生此错误后 syserr 的值为 1012。我现在将观察 syserr 的值,如果失败则重试固定次数。[/更新2]

[更新3]我已经运行了一些代码几天了,现在可以工作了。另一个问题是(当然)如果 &syserr 得到的值高于 6,就会发生错误情况,因此根据您的 errorabend/noerrorabend 设置,这会导致程序完全结束,或者导致程序在语法检查模式下以 obs=0 继续。两者都是不可取的。解决方案是在产生此错误的数据步骤之前设置 options noerrorabend nosyntaxcheck。此外,如果发生错误,我必须清除文件名 extsrc 并重新分配它。最后,一旦这段代码完成,我就会恢复 errorabend。如果我恢复 nosyntaxcheck,这会导致 SAS 检测到先前的错误条件并在此时切换到语法检查模式,这也是不可取的。[/更新3]

最佳答案

您是否尝试过测试 &syserr 的值?任何不为 0 的值通常都表明存在问题。

可以看到返回值here 。从列表来看,我猜测 1012 或 1020 是您在套接字错误期间得到的结果。

关于sockets - OpenVMS 下 SAS 中套接字的错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/793127/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com