IO::Socket: buffering error ?

Discussion in 'Perl Misc' started by galdor, May 26, 2005.

  1. galdor

    galdor Guest

    Hi,

    It seems i've a problem with socket-buffering ; i use IO::Socket::INET
    to connect a client-program to a server-program, and send orders.

    Every connection to the server is well-detected, but every string i
    send to the server arrives *only* when i close the client-socket.

    I've tried the flush and autoflush method, but result is the same.

    Anyone would have an idea ?
     
    galdor, May 26, 2005
    #1
    1. Advertising

  2. galdor

    Guest

    "galdor" <> wrote:
    > Hi,
    >
    > It seems i've a problem with socket-buffering ; i use IO::Socket::INET
    > to connect a client-program to a server-program, and send orders.
    >
    > Every connection to the server is well-detected, but every string i
    > send to the server arrives *only* when i close the client-socket.


    Sounds like you have a flushing problem.


    > I've tried the flush and autoflush method, but result is the same.


    Maybe you did it wrong.

    > Anyone would have an idea ?


    My idea would be make a small complete program which demonstrates the
    problem, and show the damn thing to the people you are asking for help.
    Maybe that is just me.

    Xho

    --
    -------------------- http://NewsReader.Com/ --------------------
    Usenet Newsgroup Service $9.95/Month 30GB
     
    , May 26, 2005
    #2
    1. Advertising

  3. galdor

    galdor Guest

    galdor, May 26, 2005
    #3
  4. Well, please learn how to quote properly. I know Google is not the best
    newsreader you could use, but I've heard there is an option to quote as
    recommended. Please, read something about quoting in newsgroups, eg at

    http://www.netmeister.org/news/learn2quote.html

    It would be in *your* interest to provide some context when composing
    contributions to a newsgroup. In the following, I fixed this for you.

    * galdor schrieb:
    > wrote:
    > > galdor wrote:


    > > > It seems i've a problem with socket-buffering; i use IO::Socket::INET
    > > > to connect a client-program to a server-program, and send orders.
    > > > Every connection to the server is well-detected, but every string i
    > > > send to the server arrives *only* when i close the client-socket.

    > >
    > > Sounds like you have a flushing problem.
    > >
    > > > I've tried the flush and autoflush method, but result is the same.


    Well, your server is reading the messages line by line. But how to know
    the length of a line? Right, simply add a CRLF ("\r\n") to the rear of
    the messages. I prefer to use IO::Socket's capabilities for this (you've
    to change the use-statement for IO::Socket::INET for that):

    use IO::Socket::INET qw( SOCK_STREAM CRLF );
    print $sock_com $comres{"com"}, CRLF;

    With that, your server reads the messages when they arrived instead of
    reading them when the socket is closed. The CRLF means as much as "this
    is the end of this message".

    Btw, I suggest to turn on autoflush for STDOUT by writing

    $|++;

    in the beginning of your script (well, this could be a particularity of
    my console on WinXP, but without that I don't see anything on my screen
    before the script terminates -- your console's behavior could differ).

    > >
    > > My idea would be make a small complete program which demonstrates the
    > > problem, and show the damn thing to the people you are asking for help.
    > > Maybe that is just me.


    > You'll find the both client and server program here:
    > http://darkmaster.sp.free.fr/prog/perl/


    That is not exactly what Xho meant by asking for a "small complete
    program". Indeed, they are complete programs, but "small" means to
    remove all unnecessary parts of your scripts. Shortening a script is
    what *you* should do in order that *we* don't have to search for the
    relevant parts in your script.

    regards,
    fabian
     
    Fabian Pilkowski, May 26, 2005
    #4
  5. galdor

    galdor Guest

    Fabian Pilkowski a écrit :
    > Well, please learn how to quote properly.

    Understood :)


    > Well, your server is reading the messages line by line. But how to know
    > the length of a line? Right, simply add a CRLF ("\r\n") to the rear of
    > the messages. I prefer to use IO::Socket's capabilities for this (you've
    > to change the use-statement for IO::Socket::INET for that):
    >
    > use IO::Socket::INET qw( SOCK_STREAM CRLF );
    > print $sock_com $comres{"com"}, CRLF;
    >
    > With that, your server reads the messages when they arrived instead of
    > reading them when the socket is closed. The CRLF means as much as "this
    > is the end of this message".

    Fine trick, it's all good, !



    > That is not exactly what Xho meant by asking for a "small complete
    > program". Indeed, they are complete programs, but "small" means to
    > remove all unnecessary parts of your scripts. Shortening a script is
    > what *you* should do in order that *we* don't have to search for the
    > relevant parts in your script.

    Ok, understood too.

    Thank's for your help !

    galdor
     
    galdor, May 27, 2005
    #5
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Laszlo Nagy
    Replies:
    1
    Views:
    5,092
    Mark Wooding
    Jan 27, 2009
  2. Jean-Paul Calderone
    Replies:
    0
    Views:
    1,027
    Jean-Paul Calderone
    Jan 27, 2009
  3. Laszlo Nagy
    Replies:
    0
    Views:
    595
    Laszlo Nagy
    Feb 1, 2009
  4. Steve Holden
    Replies:
    0
    Views:
    711
    Steve Holden
    Feb 1, 2009
  5. Steve Holden
    Replies:
    1
    Views:
    756
Loading...

Share This Page