• gsoap 超时(timeout)设置


    参考:http://www.cs.fsu.edu/~engelen/soapdoc2.html#tth_sEc19.19

    gsoap就不用介绍了,是一个c/c++编写的可用于服务端与客户端的连接工具。

    Socket connect, accept, send, and receive timeout values can be set to manage socket communication timeouts. The soap.connect_timeoutsoap.accept_timeoutsoap.send_timeout, and soap.recv_timeout attributes of the current gSOAP runtime context soap can be set to the appropriate user-defined socket send, receive, and accept timeout values. A positive value measures the timeout in seconds. A negative timeout value measures the timeout in microseconds (10−6 sec).
     
    The soap.connect_timeout specifies the timeout for soap_call_ns__method calls.
     
    The soap.accept_timeout specifies the timeout for soap_accept(&soap) calls.
     
    The soap.send_timeout and soap.recv_timeout specify the timeout for non-blocking socket I/O operations.
     
    Example: 

    struct soap soap; 
    soap_init(&soap); 
    soap.send_timeout = 10; 
    soap.recv_timeout = 10;

    This will result in a timeout if no data can be send in 10 seconds and no data is received within 10 seconds after initiating a send or receive operation over the socket. A value of zero disables timeout, for example: 

    soap.send_timeout = 0; 
    soap.recv_timeout = 0;

    When a timeout occurs in send/receive operations, a SOAP_EOF exception will be raised ("end of file or no input"). Negative timeout values measure timeouts in microseconds, for example: 

    #define uSec *-1 
    #define mSec *-1000 
    soap.accept_timeout = 10 uSec; 
    soap.send_timeout = 20 mSec; 
    soap.recv_timeout = 20 mSec;

    The macros improve readability.
     
    Caution: many Linux versions do not support non-blocking connect(). Therefore, setting soap.connect_timeout for non-blocking soap_call_ns__method calls may not work under Linux.
     
    Caution: interrupts (EINTR) can affect the blocking time in I/O operations. The maximum number of EINTR that will not trigger an error is set by SOAP_MAXEINTR in stdsoap2.h, which is 10 by default. Each EINTR may increase the blocking time by up to one second, up to SOAP_MAXEINTR seconds total.

    初始化gsoap后,然后就可以设置了。

    在struct soap里面 是有很多参数的,具体可以参见  stdsoap2.h文件。。

    只要

    soap.send_timeout = 10; 
    soap.recv_timeout = 10;

    就可以。。

    因为gsoap使用的包装http协议。然后最主要的是socket传输,对于我们熟悉的socket传输,我们在非阻塞的情况下才能设置超时。(包括 连接超时 accetp_timeout, 发送超时 send_timeout, 以及接受超时 recv_timeout)

  • 相关阅读:
    (Java实现) 洛谷 P1603 斯诺登的密码
    (Java实现) 洛谷 P1036 选数
    (Java实现) 洛谷 P1036 选数
    (Java实现) 洛谷 P1012 拼数
    (Java实现) 洛谷 P1012 拼数
    (Java实现) 洛谷 P1028 数的计算
    (Java实现) 洛谷 P1028 数的计算
    (Java实现) 洛谷 P1553 数字反转(升级版)
    8.4 确定两个日期之间的月份数或年数
    (Java实现) 洛谷 P1553 数字反转(升级版)
  • 原文地址:https://www.cnblogs.com/hcu5555/p/3707190.html
Copyright © 2020-2023  润新知