Actually it looks more doable than I thought: https://github.com/natefinch/npipe/blob/master/npipe_windows.go So its mostly a matter of importing this for windows. Very cool. :-) It should be ~trivial to build a winipc plugin that provides this on Windows, because Nate’s work provides the same API as Unix sockets on POSIX systems. I might see if I can make this work on Windows later in the week. :-) -- Garrett D'Amore Sent with Airmail On April 14, 2014 at 10:30:28 AM, Garrett D'Amore (garrett@xxxxxxxxxx) wrote: On April 14, 2014 at 10:19:27 AM, Gonzalo Diethelm (gonzalo.diethelm@xxxxxxxxx) wrote: Garrett, what is the state of support in Go for IPC under Windows (ie Named Pipes)? Could this be something easily added to gonano (to choose a specific name)? Go on Windows currently lacks an IPC layer (named pipes). If it were added to Go, then it could be added easily to my implementation. It could also be possible to add this using an external plugin/transport, as transports are fairly pluggable in my implementation. But that would presumably mean writing some native code for it. I’m not a Windows developer (I don’t even have tools for developing on Windows), so I’m not the person to do it. I could also “fake” IPC out by using a loopback (127.0.0.1) interface and a custom port to rendezvous on path, which would allow programs written using ipc/// strings to work. But really for those programs, it would be better to just use tcp:// addresses. I do wonder what advantages Named Pipes on Windows offer over using loopback TCP connections. Again, thanks for all your work, it is great for the project to have alternative implementations. Its been a real pleasure.. I’m looking forward to doing more with this stuff soon. - Garrett On Mon, Apr 14, 2014 at 12:58 PM, Garrett D'Amore <garrett@xxxxxxxxxx> wrote: More Go nanomsg updates: I’ve added the missing patterns, so right now the only functionality that nanomsg has that my implementation is a common Device() function, and a nanocat command line utility. I’ll be adding those soon. (And then I’ll turn my attention to adding TLS to nanomsg itself, and probably websocket to both nanomsg and my implementation.) In addition, as before, it still supports the TLS transport, and a new STAR pattern, which are unique to this implementation (not supported in nanomsg.) (Martin, I’m using protocol number 100 for STAR, for now. We should probably define a region of numbers for experimental protocols/patterns which might not be considered “portable” between implementations in applications.) As a little bonus, I did some more minor tuning, and my req/rep latency dropped from 6458 ns/op to 5339 ns/op. That means that this implementation is now about 20% *faster* than native nanomsg when using inproc. The other transports got minor improvements, generally most benefiting the single threaded (GOMAXPROCS=1), i.e. default configuration, run, yielding between 1 and 8 usec (or about 15%-30%) improvement depending on the transport. This brings me within spitting distance of nanomsg for TCP and IPC, although I think I’m still paying some penalties for the extra distance from the native file descriptors that Go forces me to pay. (For exmaple, IPC is still about 3 usec slower than native nanomsg — 18.3 usec vs 15.7 usec for nanomsg.) Sadly, when running multithreaded, we don’t see quite the same benefit for latency, and throughput suffers about 2-3%. (When running single threaded, the performance *improves* by about the same amount.) There are also now options to configure timeouts, etc. and a “common” test framework (which needs a lot more work to extend it.) As usual, the code can be found here: https://bitbucket.org/gdamore/sp -- Garrett D'Amore Sent with Airmail -- Gonzalo Diethelm gonzalo.diethelm@xxxxxxxxx