You can use getpeername() to reliably tell if your socket is connected or not, if it returns undef, you don't have a connection. This is exactly how IO::Socket handles things.

The code that you've written should work, although it will close the socket on any connection, not just the connection going away. In particular, if your socket is in non-blocking mode, syswrite can return errors (EAGAIN) if the other side simply isn't ready for more data.

If you are using non-blocking connections, or multiple connections at once, then the chances are you'll find the built-in function select, or the module IO::Select, very handy for telling when it's time to read/write to your sockets. The Perl Cookbook has a good example of this in section 17.13 (Non-Forking Servers).

Hope you find the above useful. Let me know if it doesn't solve your problem.

Cheers,
Paul


In reply to Re: How do i detect that the client has disconnected ? (i'm using sysread/write) by pjf
in thread How do i detect that the client has disconnected ? (i'm using sysread/write) by shlomi

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.