in reply to Re^6: Thread weirdness
in thread Thread weirdness

What did you expect it to do that it didn't do?


Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
"Science is about questioning the status quo. Questioning authority".
In the absence of evidence, opinion is indistinguishable from prejudice.
"Too many [] have been sedated by an oppressive environment of political correctness and risk aversion."

Replies are listed 'Best First'.
Re^8: Thread weirdness
by j0nny (Initiate) on Sep 26, 2008 at 23:20 UTC
    Enable the socket to be written to while being read (Isn't that the problem?).

      Setting the socket non-blocking doesn't allow the socket to be read and written concurrently. What it does do, is allow you to determine whether there is anything available to be read, and only read when there is.

      That is, instead of your main thread blocking on the socket read waiting for something to arrive, thereby stopping the other thread from writing to the socket. You need to re-write the code so that the main thread blocks on some other mechanism until it knows that there is data available to be read, and only then enter a read when it know it will return immediately. In this way, the other thread will always be able to write except for a brief period while the main thread is reading.

      The appropriate blocking mechanism is the can_read() method from IO::Select.

      But be warned, you will also need to use recv or sysread and perform the line buffering yourself.


      Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
      "Science is about questioning the status quo. Questioning authority".
      In the absence of evidence, opinion is indistinguishable from prejudice.