19.17 对非阻塞操作的超时管理
套接字连接超时,接收套接字连接超时,发送超时,接收超时都可以被设置,用来管理套接字通信超时。当前的gSoap运行时环境soap的soap.connect timeout, soap.accept timeout, soap.send timeout, 和 soap.recv timeout属性就是被用来设置成用户自定义的超时值。正值以秒为单位。负值以微秒为单位。
soap.connect timeout定义了方法soap call ns method的超时。
soap. accept timeout定义了方法soap accept(&soap)的超时。
soap.send timeout和 soap.recv timeout定义了非阻塞套接字输入输出操作的超时。
例:
struct soap soap;
soap init(&soap);
soap.send timeout = 10;
soap.recv timeout = 10;
当套接字的发送和接收操作初始化之后,如果在10秒之内没有发送数据并且没有接收到数据,将引发超时。如果超时值设为零,将关闭超时。例:
soap.send timeout = 0;
soap.recv timeout = 0;
当发送和接收操作发生超时,将会抛出SOAP EOF异常(文件结尾或没有输入)。负值以微秒为单位,例:
#de_ne uSec *-1
#de_ne mSec *-1000
soap.accept timeout = 10 uSec;
soap.send timeout = 20 mSec;
soap.recv timeout = 20 mSec;
定义宏是为了增加可读性。
警告:很多Linux版本不支持非阻塞连接操作。因此,为非阻塞soap call ns method方法设置soap.connect timeout可能会不起作用。