in reply to sending data over TCP channel using POE::Component::Server::TCP

Your client is treating the connection as a stream (by using POE::Filter::Stream to interpret the data). It seems to me that the server should be doing the same.

Are your sure your sysread() read everything?

Have you tried printing the length() of what you're sending and receiving? When I do that here, I get:

% perl perlmonks-701147-server.pl
got a connection from 127.0.0.1
sending 21097
and
% perl perlmonks-701147-client.pl
sending request on localhost:12345 ...
input size: 21099
The client receives 2 additional characters: carriage return, and linefeed. The default server-side POE::Filter::Line adds them, and the client-side POE::Filter::Stream doesn't remove them.

If you're still having problems, maybe you're running an old version of POE? I can't reproduce the error with your test case, so something must be outdated or different between our systems.

  • Comment on Re: sending data over TCP channel using POE::Component::Server::TCP

Replies are listed 'Best First'.
Re^2: sending data over TCP channel using POE::Component::Server::TCP
by cta (Acolyte) on Jul 30, 2008 at 18:52 UTC
    Yes I did.
    I get 14003 for the sending data and 11060 at the receiver.
    my POE version is 0.9989. Which one are you using now?

    Update:
    Please retake a look at the server code again. I made some changes there.
    I tried to update to the latest version version which is 1.002 and run the same program.
    It gives me this error :
    Prototype mismatch: sub POE::Kernel::F_GETFL: none vs () at C:/Perl/site/lib/POE/Resource/FileHandles.pm line 24.
    Prototype mismatch: sub POE::Kernel::F_SETFL: none vs () at C:/Perl/site/lib/POE/Resource/FileHandles.pm line 25.
    I didn't have it with the old one.
      I took a look at the "Prototype mismatch" error you describe here (after upgrading to POE version 1.002), and although I'm not running activestate perl, the version of POE I have running on my Apple Mac, shows the following code:
      .../POE/Kernel.pm BEGIN { ... if ($^O eq 'MSWin32') { *{ __PACKAGE__ . '::RUNNING_IN_HELL' } = sub { 1 }; } else { *{ __PACKAGE__ . '::RUNNING_IN_HELL' } = sub { 0 }; } ... } .../POE/Resource/FileHandles.pm: ### Some portability things. # Provide dummy constants so things at least compile. These constants # aren't used if we're RUNNING_IN_HELL, but Perl needs to see them. BEGIN { if (RUNNING_IN_HELL) { eval '*F_GETFL = sub { 0 };'; eval '*F_SETFL = sub { 0 };'; } }
      I think we'll need to take a peek at your Kernel.pm and FileHandles.pm to see what's going on here. Anybody else have any thoughts on this? In any case, I don't think its part of your original problem (well, not yet anyways).

      One other interesting thing is that this same error shows up in the Activestate build here.

      -Craig

        What I can find in these 2 files is not the same as yours. Here is the code:
        ../POE/kernel.pm ... { no strict 'refs'; if ($^O eq 'MSWin32') { *{ __PACKAGE__ . '::RUNNING_IN_HELL' } = sub { 1 }; } else { *{ __PACKAGE__ . '::RUNNING_IN_HELL' } = sub { 0 }; } ... .../POE/Resource/FileHandles.pm BEGIN { eval 'F_GETFL'; if ($@) { *F_GETFL = sub () { 0 }; *F_SETFL = sub () { 0 }; }
        There's eval 'F_GETFL' come up. This certainly means something but I don't know what it is.
        I use windows platform and my version of perl is 5.8.

      As a developer of POE, I use whatever's currently in the repository. "Eating my own dog food" is one of the easier methods of quality assurance. The latest CPAN version should be pretty close: I'm releasing earlier and more often than I have been.

      I wasn't able to reproduce the problem on Mac OSX. There may be Windows issues at work. There are very good reasons why it's called "running in hell".

        Hi, I've just installed the latest version OF POE on ActivePerl 5.8.8 and I've got the same errors: Prototype mismatch: sub POE::Kernel::F_GETFL: none vs () at C:/Perl/site/lib/POE/Resource/FileHandles.pm line 24. Prototype mismatch: sub POE::Kernel::F_SETFL: none vs () at C:/Perl/site/lib/POE/Resource/FileHandles.pm line 25. I tested it with the sample given in the POE perldoc. I don't have this with a previous version. May you help? Cheers, Sebastien