ewx: (geek)
Richard Kettlewell ([personal profile] ewx) wrote2008-03-09 11:13 am
Entry tags:

I don't think I should have to do this

--- server/play.c       2008-03-03 22:56:22 +0000
+++ server/play.c       2008-03-09 11:10:46 +0000
@@ -389,8 +390,14 @@
       /* np will be the pipe to disorder-normalize */
       if(socketpair(PF_UNIX, SOCK_STREAM, 0, np) < 0)
         fatal(errno, "error calling socketpair");
+      /* Beware of the Leopard!  On OS X 10.5.x, the order of the shutdown
+       * calls here DOES MATTER.  If you do the SHUT_WR first then the SHUT_RD
+       * fails iwth "Socket is not connected".  I think this is a bug but
+       * provided implementors either don't care about the order or all agree
+       * about the order, choosing the reliable order is an adequate
+       * workaround.  */
+      xshutdown(np[1], SHUT_RD);       /* decoder writes to np[1] */
       xshutdown(np[0], SHUT_WR);       /* normalize reads from np[0] */
-      xshutdown(np[1], SHUT_RD);       /* decoder writes to np[1] */
       blocking(np[0]);
       blocking(np[1]);
       /* Start disorder-normalize */

simont: A picture of me in 2016 (Default)

[personal profile] simont 2008-03-09 12:09 pm (UTC)(link)
That does seem a bit ick, although it has the saving grace of giving you an excellent excuse to use that comment :-)

JOOI, what's a socketpair with one direction shut down got that a simple pipe hasn't?
ext_8103: (Default)

[identity profile] ewx.livejournal.com 2008-03-09 12:56 pm (UTC)(link)
It lacks the insane PIPE_BUF rules.
gerald_duck: (ascii)

[personal profile] gerald_duck 2008-03-09 01:56 pm (UTC)(link)
On a related note, what's a socketpair with one direction shut down got that a socketpair with both directions still running hasn't?
ext_8103: (Default)

[identity profile] ewx.livejournal.com 2008-03-09 02:33 pm (UTC)(link)
Means you spot errors more quickly if you get the ends back to front l-)
simont: A picture of me in 2016 (Default)

[personal profile] simont 2008-03-10 11:50 am (UTC)(link)
Are those rules impeding something specific you want to do with the pipe/socketpair, or do you just avoid pipes on general principles just in case?

(I always use actual pipes when I want a thing that looks basically like a pipe, and the PIPE_BUF rules have never bitten me yet. I'm curious to know whether I'm being unconscionably reckless or whether you're doing something particularly demanding ;-)
ext_8103: (Default)

[identity profile] ewx.livejournal.com 2008-03-10 02:57 pm (UTC)(link)
It's imaginable that someone's decoder might want to do nonblocking output to that FD, though neither of the shipped decoders do so at the moment.

[identity profile] pjc50.livejournal.com 2008-03-10 09:33 am (UTC)(link)
The sound of one pipe sucking?
ext_8103: (Default)

[identity profile] ewx.livejournal.com 2008-03-10 09:58 am (UTC)(link)
Oh, also, a socketpair with one direction shut down is unidirectional, whereas a pipe will be bidirectional on some systems.

[identity profile] mstevens.livejournal.com 2008-03-09 02:15 pm (UTC)(link)
You spelt "with" wrong in the comment.
ext_8103: (Default)

[identity profile] ewx.livejournal.com 2008-03-09 02:37 pm (UTC)(link)
Oops l-)