jil*_*wit 7 sockets error-handling sas openvms
我在OpenVMS上使用SAS 9.2通过一个用filename语句指定的套接字连接到外部数据源:
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已分配但未指向本地文件(这是真的).当我在datastep中使用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;
[update1]我正在尝试下面的建议,但是在真正的heisenbug方式中,问题在过去几天没有出现,所以我不确定最终的解决方案是什么.[/ UPDATE1]
[update2]错误终于再次出现.根据cmjohns的回答,发生此错误后,syserr的值为1012.我现在将观察syserr的值,如果失败则再次尝试固定次数.[/ UPDATE2]
[update3]我已经有一些代码运行了几天,现在有效.另外一个问题是(当然)如果&syserr得到一个高于6的值,则出现错误情况,因此根据您的errorabend/noerrorabend设置,这会导致程序完全结束,或者导致程序继续obs=0处于syntaxchek模式.两者都不可取.解决方案是options noerrorabend nosyntaxcheck在产生此错误的datastep之前设置.此外,如果发生错误,我必须清除文件名extsrc并重新分配它.最后,一旦完成这段代码,我就恢复了errorabend.如果我恢复nosyntaxcheck,这会导致SAS检测到先前的错误情况并在该点切换到语法检查模式,这也是不合需要的.[/ UPDATE3]
| 归档时间: | 
 | 
| 查看次数: | 1041 次 | 
| 最近记录: |