{"action":"created","issue":{"url":"https://api.github.com/repos/dotnet/corefx/issues/1849","labels_url":"https://api.github.com/repos/dotnet/corefx/issues/1849/labels{/name}","comments_url":"https://api.github.com/repos/dotnet/corefx/issues/1849/comments","events_url":"https://api.github.com/repos/dotnet/corefx/issues/1849/events","html_url":"https://github.com/dotnet/corefx/issues/1849","id":81631764,"number":1849,"title":"Unix: Why not use Unix Domain Sockets for Named Pipes?","user":{"login":"bpschoch","id":10160075,"avatar_url":"https://avatars.githubusercontent.com/u/10160075?v=3","gravatar_id":"","url":"https://api.github.com/users/bpschoch","html_url":"https://github.com/bpschoch","followers_url":"https://api.github.com/users/bpschoch/followers","following_url":"https://api.github.com/users/bpschoch/following{/other_user}","gists_url":"https://api.github.com/users/bpschoch/gists{/gist_id}","starred_url":"https://api.github.com/users/bpschoch/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bpschoch/subscriptions","organizations_url":"https://api.github.com/users/bpschoch/orgs","repos_url":"https://api.github.com/users/bpschoch/repos","events_url":"https://api.github.com/users/bpschoch/events{/privacy}","received_events_url":"https://api.github.com/users/bpschoch/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"milestone":null,"comments":5,"created_at":"2015-05-27T21:25:21Z","updated_at":"2015-07-15T15:58:49Z","closed_at":null,"body":"System.IO.Pipes map to native windows implementations of anonymous and named pipes.\r\n\r\nWindows anonymous are close in implementation to Unix pipes in that they are one way and byte oriented (not datagram or message oriented).\r\n\r\nOn the other hand, Named pipes can be either full (supporting I/O in both directions) or half (I/O in one direction) and messages can either be byte oriented or message/datagram oriented.   Pipe connections can also be made across systems through the network (I believe using SMB)\r\n\r\nUnix has named pipes called FiFo's but they are one way only and not message oriented.  The current Pipes port for corefx under unix uses FIfo's and therefore is a subset implementation.\r\n\r\nInstead of using Fifo's why don't we use Unix Domain Sockets?  They support most of the functionality of windows named pipes including full/half duplex, byte or message oriented.  They however don't support cross system connections.   see overview of Unix Domain Sockets here:  http://www.thomasstover.com/uds.html\r\n\r\nUltimately, what is the goal of the corefx library on a different platform?  To bind to existing similar functionality? or to provide strict portability of the api's across platforms (what I'm calling emulation)?\r\n\r\nIf we strictly bind, then there will always be limitations and differences on functionality provided thus decreasing portability.  However by binding, we are hooking into existing OS capabilities and can in theory hook up to other non-net apps on the host platform.\r\n\r\nIf we strictly emulate (e.g. say grab a chunk of shared memory and then using semaphores to strictly emulate named pipes functionality under Unix), then we can be extremely portable however we can't communicate with anything else.\r\n\r\nA possible solution is to extend what can be used as a 'pipe name' in the system.io.pipes implementation where the syntax can be extended to give hints as to what to bind to in the underlying implementation but with the default (without any extended syntax) defaulting to an emulated functional solution.\r\n\r\nComments? "},"comment":{"url":"https://api.github.com/repos/dotnet/corefx/issues/comments/121660982","html_url":"https://github.com/dotnet/corefx/issues/1849#issuecomment-121660982","issue_url":"https://api.github.com/repos/dotnet/corefx/issues/1849","id":121660982,"user":{"login":"stephentoub","id":2642209,"avatar_url":"https://avatars.githubusercontent.com/u/2642209?v=3","gravatar_id":"","url":"https://api.github.com/users/stephentoub","html_url":"https://github.com/stephentoub","followers_url":"https://api.github.com/users/stephentoub/followers","following_url":"https://api.github.com/users/stephentoub/following{/other_user}","gists_url":"https://api.github.com/users/stephentoub/gists{/gist_id}","starred_url":"https://api.github.com/users/stephentoub/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/stephentoub/subscriptions","organizations_url":"https://api.github.com/users/stephentoub/orgs","repos_url":"https://api.github.com/users/stephentoub/repos","events_url":"https://api.github.com/users/stephentoub/events{/privacy}","received_events_url":"https://api.github.com/users/stephentoub/received_events","type":"User","site_admin":false},"created_at":"2015-07-15T15:58:49Z","updated_at":"2015-07-15T15:58:49Z","body":"@bpschoch, checking in on this.  Is this something you're still investigating?"}}