Loading ...
Sorry, an error occurred while loading the content.

SOAP on TCP timeout

Expand Messages
  • Weidong Wang
    I need to make the client to wait much longer for the result to come back. With SOAP on HTTP, I can do either my $soap = SOAP::Lite - proxy($proxy, timeout =
    Message 1 of 5 , Jun 27, 2001
    • 0 Attachment
      I need to make the client to wait much longer for the result to come back.

      With SOAP on HTTP, I can do either

      my $soap = SOAP::Lite
      -> proxy($proxy, timeout => 10)
      -> uri($uri);

      or

      $soap->transport->timeout(10);

      But I also need to do so for a SOAP TCP client. Same tricks (with $Poxy as
      tcp:host:port) do not work. In the latter case, it simply said that method
      "timeout" cannot be located in the package SOAP::Transport::TCP::Client.

      Looking at the TCP::Client code and IO::Socket code, it seems to me that it
      should work.

      Any ideas? Thanks.

      Weidong
    • Paul Kulchenko
      Hi, Weidong! It should be Timeout. It might be confusing sometimes, but choosing between having the same interface for ALL transports or have original
      Message 2 of 5 , Jun 27, 2001
      • 0 Attachment
        Hi, Weidong!

        It should be Timeout. It might be confusing sometimes, but choosing
        between having the same interface for ALL transports or have original
        interface for those transports, I choose the later. Working with
        specific transport, you may use the same options you would use
        working with it directly. So, code probably should look like:

        my $soap = SOAP::Lite
        -> proxy($proxy, Timeout => 10)
        -> uri($uri);

        Best wishes, Paul.

        --- Weidong Wang <wwang@...> wrote:
        > I need to make the client to wait much longer for the result to
        > come back.
        >
        > With SOAP on HTTP, I can do either
        >
        > my $soap = SOAP::Lite
        > -> proxy($proxy, timeout => 10)
        > -> uri($uri);
        >
        > or
        >
        > $soap->transport->timeout(10);
        >
        > But I also need to do so for a SOAP TCP client. Same tricks (with
        > $Poxy as
        > tcp:host:port) do not work. In the latter case, it simply said that
        > method
        > "timeout" cannot be located in the package
        > SOAP::Transport::TCP::Client.
        >
        > Looking at the TCP::Client code and IO::Socket code, it seems to me
        > that it
        > should work.
        >
        > Any ideas? Thanks.
        >
        > Weidong
        >
        >
        >
        > To unsubscribe from this group, send an email to:
        > soaplite-unsubscribe@yahoogroups.com
        >
        >
        >
        > Your use of Yahoo! Groups is subject to
        > http://docs.yahoo.com/info/terms/
        >
        >


        __________________________________________________
        Do You Yahoo!?
        Get personalized email addresses from Yahoo! Mail
        http://personal.mail.yahoo.com/
      • Weidong Wang
        Paul: I tried Timeout already. I set it to 0, hoping to let the client wait forever (with timeout set to 0 for HTTP, it works that way), but my TCP client
        Message 3 of 5 , Jun 27, 2001
        • 0 Attachment
          Paul:
           
              I tried "Timeout" already. I set it to 0, hoping to let the client wait forever (with timeout set to 0 for HTTP, it works that way), but my TCP client timeout by itself anyway.
           
          Weidong
           
          ----- Original Message -----
          Sent: Wednesday, June 27, 2001 1:06 PM
          Subject: Re: [soaplite] SOAP on TCP timeout

          Hi, Weidong!

          It should be Timeout. It might be confusing sometimes, but choosing
          between having the same interface for ALL transports or have original
          interface for those transports, I choose the later. Working with
          specific transport, you may use the same options you would use
          working with it directly. So, code probably should look like:

          my $soap = SOAP::Lite
            -> proxy($proxy, Timeout => 10)
            -> uri($uri);

          Best wishes, Paul.

          --- Weidong Wang <wwang@...> wrote:
          > I need to make the client to wait much longer for the result to
          > come back.
          >
          > With SOAP on HTTP, I can do either
          >
          >   my $soap = SOAP::Lite
          >     -> proxy($proxy, timeout => 10)
          >     -> uri($uri);
          >
          > or
          >
          >     $soap->transport->timeout(10);
          >
          > But I also need to do so for a SOAP TCP client. Same tricks (with
          > $Poxy as
          > tcp:host:port) do not work. In the latter case, it simply said that
          > method
          > "timeout" cannot be located in the package
          > SOAP::Transport::TCP::Client.
          >
          > Looking at the TCP::Client code and IO::Socket code, it seems to me
          > that it
          > should work.
          >
          > Any ideas? Thanks.
          >
          > Weidong
          >
          >
          >
          > To unsubscribe from this group, send an email to:
          > soaplite-unsubscribe@yahoogroups.com
          >

          >
          > Your use of Yahoo! Groups is subject to
          > http://docs.yahoo.com/info/terms/
          >
          >


          __________________________________________________
          Do You Yahoo!?
          Get personalized email addresses from Yahoo! Mail
          http://personal.mail.yahoo.com/


          To unsubscribe from this group, send an email to:
          soaplite-unsubscribe@yahoogroups.com



          Your use of Yahoo! Groups is subject to the Yahoo! Terms of Service.
        • Paul Kulchenko
          Hi, Weidong! My copy of IO::Socket::INET has this code: return _error($sock, $!, Timeout ) unless @raddr; So, it returns Timeout regardless of Timeout value
          Message 4 of 5 , Jun 27, 2001
          • 0 Attachment
            Hi, Weidong!

            My copy of IO::Socket::INET has this code:

            return _error($sock, $!, "Timeout")
            unless @raddr;

            So, it returns Timeout regardless of Timeout value if it couldn't
            connect to remote host (IO::Socket::INET: Timeout).

            > I tried "Timeout" already. I set it to 0, hoping to let the
            > client wait forever (with timeout set to 0 for HTTP, it works that
            > way), but my TCP client timeout by itself anyway.
            This setting works only for connect, but not for send/recv. Those are
            blocking regardless of Timeout value, unless you change it.

            You may also try to specify big value of Timeout. What error do you
            have? Could someone experienced in sockets comment on this issue?

            Best wishes, Paul.

            --- Weidong Wang <wwang@...> wrote:
            > Paul:
            >
            > I tried "Timeout" already. I set it to 0, hoping to let the
            > client wait forever (with timeout set to 0 for HTTP, it works that
            > way), but my TCP client timeout by itself anyway.
            >
            > Weidong
            >
            > ----- Original Message -----
            > From: Paul Kulchenko
            > To: soaplite@yahoogroups.com
            > Sent: Wednesday, June 27, 2001 1:06 PM
            > Subject: Re: [soaplite] SOAP on TCP timeout
            >
            >
            > Hi, Weidong!
            >
            > It should be Timeout. It might be confusing sometimes, but
            > choosing
            > between having the same interface for ALL transports or have
            > original
            > interface for those transports, I choose the later. Working with
            > specific transport, you may use the same options you would use
            > working with it directly. So, code probably should look like:
            >
            > my $soap = SOAP::Lite
            > -> proxy($proxy, Timeout => 10)
            > -> uri($uri);
            >
            > Best wishes, Paul.
            >
            > --- Weidong Wang <wwang@...> wrote:
            > > I need to make the client to wait much longer for the result to
            > > come back.
            > >
            > > With SOAP on HTTP, I can do either
            > >
            > > my $soap = SOAP::Lite
            > > -> proxy($proxy, timeout => 10)
            > > -> uri($uri);
            > >
            > > or
            > >
            > > $soap->transport->timeout(10);
            > >
            > > But I also need to do so for a SOAP TCP client. Same tricks
            > (with
            > > $Poxy as
            > > tcp:host:port) do not work. In the latter case, it simply said
            > that
            > > method
            > > "timeout" cannot be located in the package
            > > SOAP::Transport::TCP::Client.
            > >
            > > Looking at the TCP::Client code and IO::Socket code, it seems
            > to me
            > > that it
            > > should work.
            > >
            > > Any ideas? Thanks.
            > >
            > > Weidong
            > >
            > >
            > >
            > > To unsubscribe from this group, send an email to:
            > > soaplite-unsubscribe@yahoogroups.com
            > >
            > >
            > >
            > > Your use of Yahoo! Groups is subject to
            > > http://docs.yahoo.com/info/terms/
            > >
            > >
            >
            >
            > __________________________________________________
            > Do You Yahoo!?
            > Get personalized email addresses from Yahoo! Mail
            > http://personal.mail.yahoo.com/
            >
            > Yahoo! Groups Sponsor
            >
            >
            >
            > To unsubscribe from this group, send an email to:
            > soaplite-unsubscribe@yahoogroups.com
            >
            >
            >
            > Your use of Yahoo! Groups is subject to the Yahoo! Terms of
            > Service.
            >
            >


            __________________________________________________
            Do You Yahoo!?
            Get personalized email addresses from Yahoo! Mail
            http://personal.mail.yahoo.com/
          • Arun Kumar U
            Hi, Weidong and Paul ! ... Yes, Paul you are right. The TimeOut parameter works only for accept() on the server side and connect() on the client side. Not for
            Message 5 of 5 , Jun 28, 2001
            • 0 Attachment
              Hi, Weidong and Paul !

              > This setting works only for connect, but not for send/recv. Those are
              > blocking regardless of Timeout value, unless you change it.

              Yes, Paul you are right. The TimeOut parameter works only for accept() on
              the server side and connect() on the client side. Not for send/recv calls.

              The way out of this is to patch SOAP::Transport::TCP in such a way that
              the following calls

              1. print $sock $envelope
              2. my $result = join '', <$sock>;

              are replaced with two method calls that would send and recieve soap
              messages say SendSoapMessage() and RecieveSoapMessage()

              In the RecieveSoapMessage() method you can first select() (I use
              IO::Select and $select->can_read($TimeOut)) and check whether the
              filehandle is ready for reading. The select() call would have the TimeOut
              passed as a parameter (appropriately). This mechanism would give you the
              liberty to timeout on the receiving side as you desire.

              This will also eliminate the need to do line oriented IO.

              I know its not the best description of how to implement this. If you
              (Wiedong) are interested then I can send you my implementation.

              Best Regards,
              Arun

              On Wed, 27 Jun 2001, Paul Kulchenko wrote:

              > Hi, Weidong!
              >
              > My copy of IO::Socket::INET has this code:
              >
              > return _error($sock, $!, "Timeout")
              > unless @raddr;
              >
              > So, it returns Timeout regardless of Timeout value if it couldn't
              > connect to remote host (IO::Socket::INET: Timeout).
              >
              > > I tried "Timeout" already. I set it to 0, hoping to let the
              > > client wait forever (with timeout set to 0 for HTTP, it works that
              > > way), but my TCP client timeout by itself anyway.
              > This setting works only for connect, but not for send/recv. Those are
              > blocking regardless of Timeout value, unless you change it.
              >
              > You may also try to specify big value of Timeout. What error do you
              > have? Could someone experienced in sockets comment on this issue?
              >
              > Best wishes, Paul.
              >
              > --- Weidong Wang <wwang@...> wrote:
              > > Paul:
              > >
              > > I tried "Timeout" already. I set it to 0, hoping to let the
              > > client wait forever (with timeout set to 0 for HTTP, it works that
              > > way), but my TCP client timeout by itself anyway.
              > >
              > > Weidong
              > >
              > > ----- Original Message -----
              > > From: Paul Kulchenko
              > > To: soaplite@yahoogroups.com
              > > Sent: Wednesday, June 27, 2001 1:06 PM
              > > Subject: Re: [soaplite] SOAP on TCP timeout
              > >
              > >
              > > Hi, Weidong!
              > >
              > > It should be Timeout. It might be confusing sometimes, but
              > > choosing
              > > between having the same interface for ALL transports or have
              > > original
              > > interface for those transports, I choose the later. Working with
              > > specific transport, you may use the same options you would use
              > > working with it directly. So, code probably should look like:
              > >
              > > my $soap = SOAP::Lite
              > > -> proxy($proxy, Timeout => 10)
              > > -> uri($uri);
              > >
              > > Best wishes, Paul.
              > >
              > > --- Weidong Wang <wwang@...> wrote:
              > > > I need to make the client to wait much longer for the result to
              > > > come back.
              > > >
              > > > With SOAP on HTTP, I can do either
              > > >
              > > > my $soap = SOAP::Lite
              > > > -> proxy($proxy, timeout => 10)
              > > > -> uri($uri);
              > > >
              > > > or
              > > >
              > > > $soap->transport->timeout(10);
              > > >
              > > > But I also need to do so for a SOAP TCP client. Same tricks
              > > (with
              > > > $Poxy as
              > > > tcp:host:port) do not work. In the latter case, it simply said
              > > that
              > > > method
              > > > "timeout" cannot be located in the package
              > > > SOAP::Transport::TCP::Client.
              > > >
              > > > Looking at the TCP::Client code and IO::Socket code, it seems
              > > to me
              > > > that it
              > > > should work.
              > > >
              > > > Any ideas? Thanks.
              > > >
              > > > Weidong
              > > >
              > > >
              > > >
              > > > To unsubscribe from this group, send an email to:
              > > > soaplite-unsubscribe@yahoogroups.com
              > > >
              > > >
              > > >
              > > > Your use of Yahoo! Groups is subject to
              > > > http://docs.yahoo.com/info/terms/
              > > >
              > > >
              > >
              > >
              > > __________________________________________________
              > > Do You Yahoo!?
              > > Get personalized email addresses from Yahoo! Mail
              > > http://personal.mail.yahoo.com/
              > >
              > > Yahoo! Groups Sponsor
              > >
              > >
              > >
              > > To unsubscribe from this group, send an email to:
              > > soaplite-unsubscribe@yahoogroups.com
              > >
              > >
              > >
              > > Your use of Yahoo! Groups is subject to the Yahoo! Terms of
              > > Service.
              > >
              > >
              >
              >
              > __________________________________________________
              > Do You Yahoo!?
              > Get personalized email addresses from Yahoo! Mail
              > http://personal.mail.yahoo.com/
              >
            Your message has been successfully submitted and would be delivered to recipients shortly.