{"action":"created","comment":{"url":"https://api.github.com/repos/rust-lang/rust/pulls/comments/56555761","id":56555761,"diff_hunk":"@@ -0,0 +1,1225 @@\n+// Copyright 2016 The Rust Project Developers. See the COPYRIGHT\n+// file at the top-level directory of this distribution and at\n+// http://rust-lang.org/COPYRIGHT.\n+//\n+// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or\n+// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license\n+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your\n+// option. This file may not be copied, modified, or distributed\n+// except according to those terms.\n+#![unstable(feature = \"unix_socket\", reason = \"newly added\", issue = \"32312\")]\n+\n+//! Unix-specific networking functionality\n+\n+use libc;\n+\n+use prelude::v1::*;\n+use ascii;\n+use ffi::OsStr;\n+use fmt;\n+use io;\n+use mem;\n+use net::Shutdown;\n+use os::unix::ffi::OsStrExt;\n+use os::unix::io::{RawFd, AsRawFd, FromRawFd, IntoRawFd};\n+use path::Path;\n+use time::Duration;\n+use sys::cvt;\n+use sys_common::io::read_to_end_uninitialized;\n+\n+fn sun_path_offset() -> usize {\n+    unsafe {\n+        // Work with an actual instance of the type since using a null pointer is UB\n+        let addr: libc::sockaddr_un = mem::uninitialized();\n+        let base = &addr as *const _ as usize;\n+        let path = &addr.sun_path as *const _ as usize;\n+        path - base\n+    }\n+}\n+\n+struct Inner(RawFd);\n+\n+impl Drop for Inner {\n+    fn drop(&mut self) {\n+        unsafe {\n+            libc::close(self.0);\n+        }\n+    }\n+}\n+\n+impl Inner {\n+    fn new(kind: libc::c_int) -> io::Result<Inner> {\n+        unsafe { cvt(libc::socket(libc::AF_UNIX, kind, 0)).map(Inner) }\n+    }\n+\n+    fn new_pair(kind: libc::c_int) -> io::Result<(Inner, Inner)> {\n+        unsafe {\n+            let mut fds = [0, 0];\n+            try!(cvt(libc::socketpair(libc::AF_UNIX, kind, 0, fds.as_mut_ptr())));\n+            Ok((Inner(fds[0]), Inner(fds[1])))\n+        }\n+    }\n+\n+    fn try_clone(&self) -> io::Result<Inner> {\n+        unsafe { cvt(libc::dup(self.0)).map(Inner) }\n+    }\n+\n+    fn shutdown(&self, how: Shutdown) -> io::Result<()> {\n+        let how = match how {\n+            Shutdown::Read => libc::SHUT_RD,\n+            Shutdown::Write => libc::SHUT_WR,\n+            Shutdown::Both => libc::SHUT_RDWR,\n+        };\n+\n+        unsafe { cvt(libc::shutdown(self.0, how)).map(|_| ()) }\n+    }\n+\n+    fn timeout(&self, kind: libc::c_int) -> io::Result<Option<Duration>> {","path":"src/libstd/sys/unix/ext/net.rs","position":77,"original_position":77,"commit_id":"4873202a024ee386e0170c0e7f03c04a49e2706f","original_commit_id":"4873202a024ee386e0170c0e7f03c04a49e2706f","user":{"login":"sfackler","id":1455697,"avatar_url":"https://avatars.githubusercontent.com/u/1455697?v=3","gravatar_id":"","url":"https://api.github.com/users/sfackler","html_url":"https://github.com/sfackler","followers_url":"https://api.github.com/users/sfackler/followers","following_url":"https://api.github.com/users/sfackler/following{/other_user}","gists_url":"https://api.github.com/users/sfackler/gists{/gist_id}","starred_url":"https://api.github.com/users/sfackler/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sfackler/subscriptions","organizations_url":"https://api.github.com/users/sfackler/orgs","repos_url":"https://api.github.com/users/sfackler/repos","events_url":"https://api.github.com/users/sfackler/events{/privacy}","received_events_url":"https://api.github.com/users/sfackler/received_events","type":"User","site_admin":false},"body":"I think I can extract `Socket` from the `net` module and merge it with the stuff here to fix the comments above.","created_at":"2016-03-17T18:34:06Z","updated_at":"2016-03-17T18:34:06Z","html_url":"https://github.com/rust-lang/rust/pull/32302#discussion_r56555761","pull_request_url":"https://api.github.com/repos/rust-lang/rust/pulls/32302","_links":{"self":{"href":"https://api.github.com/repos/rust-lang/rust/pulls/comments/56555761"},"html":{"href":"https://github.com/rust-lang/rust/pull/32302#discussion_r56555761"},"pull_request":{"href":"https://api.github.com/repos/rust-lang/rust/pulls/32302"}}},"pull_request":{"url":"https://api.github.com/repos/rust-lang/rust/pulls/32302","id":63170221,"html_url":"https://github.com/rust-lang/rust/pull/32302","diff_url":"https://github.com/rust-lang/rust/pull/32302.diff","patch_url":"https://github.com/rust-lang/rust/pull/32302.patch","issue_url":"https://api.github.com/repos/rust-lang/rust/issues/32302","number":32302,"state":"open","locked":false,"title":"Add unix socket support to the standard library","user":{"login":"sfackler","id":1455697,"avatar_url":"https://avatars.githubusercontent.com/u/1455697?v=3","gravatar_id":"","url":"https://api.github.com/users/sfackler","html_url":"https://github.com/sfackler","followers_url":"https://api.github.com/users/sfackler/followers","following_url":"https://api.github.com/users/sfackler/following{/other_user}","gists_url":"https://api.github.com/users/sfackler/gists{/gist_id}","starred_url":"https://api.github.com/users/sfackler/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sfackler/subscriptions","organizations_url":"https://api.github.com/users/sfackler/orgs","repos_url":"https://api.github.com/users/sfackler/repos","events_url":"https://api.github.com/users/sfackler/events{/privacy}","received_events_url":"https://api.github.com/users/sfackler/received_events","type":"User","site_admin":false},"body":"r? @alexcrichton ","created_at":"2016-03-17T03:54:18Z","updated_at":"2016-03-17T18:34:06Z","closed_at":null,"merged_at":null,"merge_commit_sha":"8fe5172d5b87609d849ab520ed84713e76e50ce0","assignee":{"login":"alexcrichton","id":64996,"avatar_url":"https://avatars.githubusercontent.com/u/64996?v=3","gravatar_id":"","url":"https://api.github.com/users/alexcrichton","html_url":"https://github.com/alexcrichton","followers_url":"https://api.github.com/users/alexcrichton/followers","following_url":"https://api.github.com/users/alexcrichton/following{/other_user}","gists_url":"https://api.github.com/users/alexcrichton/gists{/gist_id}","starred_url":"https://api.github.com/users/alexcrichton/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/alexcrichton/subscriptions","organizations_url":"https://api.github.com/users/alexcrichton/orgs","repos_url":"https://api.github.com/users/alexcrichton/repos","events_url":"https://api.github.com/users/alexcrichton/events{/privacy}","received_events_url":"https://api.github.com/users/alexcrichton/received_events","type":"User","site_admin":false},"milestone":null,"commits_url":"https://api.github.com/repos/rust-lang/rust/pulls/32302/commits","review_comments_url":"https://api.github.com/repos/rust-lang/rust/pulls/32302/comments","review_comment_url":"https://api.github.com/repos/rust-lang/rust/pulls/comments{/number}","comments_url":"https://api.github.com/repos/rust-lang/rust/issues/32302/comments","statuses_url":"https://api.github.com/repos/rust-lang/rust/statuses/4873202a024ee386e0170c0e7f03c04a49e2706f","head":{"label":"sfackler:unix-socket","ref":"unix-socket","sha":"4873202a024ee386e0170c0e7f03c04a49e2706f","user":{"login":"sfackler","id":1455697,"avatar_url":"https://avatars.githubusercontent.com/u/1455697?v=3","gravatar_id":"","url":"https://api.github.com/users/sfackler","html_url":"https://github.com/sfackler","followers_url":"https://api.github.com/users/sfackler/followers","following_url":"https://api.github.com/users/sfackler/following{/other_user}","gists_url":"https://api.github.com/users/sfackler/gists{/gist_id}","starred_url":"https://api.github.com/users/sfackler/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sfackler/subscriptions","organizations_url":"https://api.github.com/users/sfackler/orgs","repos_url":"https://api.github.com/users/sfackler/repos","events_url":"https://api.github.com/users/sfackler/events{/privacy}","received_events_url":"https://api.github.com/users/sfackler/received_events","type":"User","site_admin":false},"repo":{"id":10324482,"name":"rust","full_name":"sfackler/rust","owner":{"login":"sfackler","id":1455697,"avatar_url":"https://avatars.githubusercontent.com/u/1455697?v=3","gravatar_id":"","url":"https://api.github.com/users/sfackler","html_url":"https://github.com/sfackler","followers_url":"https://api.github.com/users/sfackler/followers","following_url":"https://api.github.com/users/sfackler/following{/other_user}","gists_url":"https://api.github.com/users/sfackler/gists{/gist_id}","starred_url":"https://api.github.com/users/sfackler/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sfackler/subscriptions","organizations_url":"https://api.github.com/users/sfackler/orgs","repos_url":"https://api.github.com/users/sfackler/repos","events_url":"https://api.github.com/users/sfackler/events{/privacy}","received_events_url":"https://api.github.com/users/sfackler/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/sfackler/rust","description":"a safe, concurrent, practical language","fork":true,"url":"https://api.github.com/repos/sfackler/rust","forks_url":"https://api.github.com/repos/sfackler/rust/forks","keys_url":"https://api.github.com/repos/sfackler/rust/keys{/key_id}","collaborators_url":"https://api.github.com/repos/sfackler/rust/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/sfackler/rust/teams","hooks_url":"https://api.github.com/repos/sfackler/rust/hooks","issue_events_url":"https://api.github.com/repos/sfackler/rust/issues/events{/number}","events_url":"https://api.github.com/repos/sfackler/rust/events","assignees_url":"https://api.github.com/repos/sfackler/rust/assignees{/user}","branches_url":"https://api.github.com/repos/sfackler/rust/branches{/branch}","tags_url":"https://api.github.com/repos/sfackler/rust/tags","blobs_url":"https://api.github.com/repos/sfackler/rust/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/sfackler/rust/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/sfackler/rust/git/refs{/sha}","trees_url":"https://api.github.com/repos/sfackler/rust/git/trees{/sha}","statuses_url":"https://api.github.com/repos/sfackler/rust/statuses/{sha}","languages_url":"https://api.github.com/repos/sfackler/rust/languages","stargazers_url":"https://api.github.com/repos/sfackler/rust/stargazers","contributors_url":"https://api.github.com/repos/sfackler/rust/contributors","subscribers_url":"https://api.github.com/repos/sfackler/rust/subscribers","subscription_url":"https://api.github.com/repos/sfackler/rust/subscription","commits_url":"https://api.github.com/repos/sfackler/rust/commits{/sha}","git_commits_url":"https://api.github.com/repos/sfackler/rust/git/commits{/sha}","comments_url":"https://api.github.com/repos/sfackler/rust/comments{/number}","issue_comment_url":"https://api.github.com/repos/sfackler/rust/issues/comments{/number}","contents_url":"https://api.github.com/repos/sfackler/rust/contents/{+path}","compare_url":"https://api.github.com/repos/sfackler/rust/compare/{base}...{head}","merges_url":"https://api.github.com/repos/sfackler/rust/merges","archive_url":"https://api.github.com/repos/sfackler/rust/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/sfackler/rust/downloads","issues_url":"https://api.github.com/repos/sfackler/rust/issues{/number}","pulls_url":"https://api.github.com/repos/sfackler/rust/pulls{/number}","milestones_url":"https://api.github.com/repos/sfackler/rust/milestones{/number}","notifications_url":"https://api.github.com/repos/sfackler/rust/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/sfackler/rust/labels{/name}","releases_url":"https://api.github.com/repos/sfackler/rust/releases{/id}","deployments_url":"https://api.github.com/repos/sfackler/rust/deployments","created_at":"2013-05-27T23:45:53Z","updated_at":"2015-01-07T05:08:25Z","pushed_at":"2016-03-17T16:31:55Z","git_url":"git://github.com/sfackler/rust.git","ssh_url":"git@github.com:sfackler/rust.git","clone_url":"https://github.com/sfackler/rust.git","svn_url":"https://github.com/sfackler/rust","homepage":"http://www.rust-lang.org","size":283439,"stargazers_count":0,"watchers_count":0,"language":"Rust","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"rust-lang:master","ref":"master","sha":"abb1515c53d209be3e8c1e9e73c1a98bc86b8692","user":{"login":"rust-lang","id":5430905,"avatar_url":"https://avatars.githubusercontent.com/u/5430905?v=3","gravatar_id":"","url":"https://api.github.com/users/rust-lang","html_url":"https://github.com/rust-lang","followers_url":"https://api.github.com/users/rust-lang/followers","following_url":"https://api.github.com/users/rust-lang/following{/other_user}","gists_url":"https://api.github.com/users/rust-lang/gists{/gist_id}","starred_url":"https://api.github.com/users/rust-lang/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rust-lang/subscriptions","organizations_url":"https://api.github.com/users/rust-lang/orgs","repos_url":"https://api.github.com/users/rust-lang/repos","events_url":"https://api.github.com/users/rust-lang/events{/privacy}","received_events_url":"https://api.github.com/users/rust-lang/received_events","type":"Organization","site_admin":false},"repo":{"id":724712,"name":"rust","full_name":"rust-lang/rust","owner":{"login":"rust-lang","id":5430905,"avatar_url":"https://avatars.githubusercontent.com/u/5430905?v=3","gravatar_id":"","url":"https://api.github.com/users/rust-lang","html_url":"https://github.com/rust-lang","followers_url":"https://api.github.com/users/rust-lang/followers","following_url":"https://api.github.com/users/rust-lang/following{/other_user}","gists_url":"https://api.github.com/users/rust-lang/gists{/gist_id}","starred_url":"https://api.github.com/users/rust-lang/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rust-lang/subscriptions","organizations_url":"https://api.github.com/users/rust-lang/orgs","repos_url":"https://api.github.com/users/rust-lang/repos","events_url":"https://api.github.com/users/rust-lang/events{/privacy}","received_events_url":"https://api.github.com/users/rust-lang/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/rust-lang/rust","description":"A safe, concurrent, practical language.","fork":false,"url":"https://api.github.com/repos/rust-lang/rust","forks_url":"https://api.github.com/repos/rust-lang/rust/forks","keys_url":"https://api.github.com/repos/rust-lang/rust/keys{/key_id}","collaborators_url":"https://api.github.com/repos/rust-lang/rust/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/rust-lang/rust/teams","hooks_url":"https://api.github.com/repos/rust-lang/rust/hooks","issue_events_url":"https://api.github.com/repos/rust-lang/rust/issues/events{/number}","events_url":"https://api.github.com/repos/rust-lang/rust/events","assignees_url":"https://api.github.com/repos/rust-lang/rust/assignees{/user}","branches_url":"https://api.github.com/repos/rust-lang/rust/branches{/branch}","tags_url":"https://api.github.com/repos/rust-lang/rust/tags","blobs_url":"https://api.github.com/repos/rust-lang/rust/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/rust-lang/rust/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/rust-lang/rust/git/refs{/sha}","trees_url":"https://api.github.com/repos/rust-lang/rust/git/trees{/sha}","statuses_url":"https://api.github.com/repos/rust-lang/rust/statuses/{sha}","languages_url":"https://api.github.com/repos/rust-lang/rust/languages","stargazers_url":"https://api.github.com/repos/rust-lang/rust/stargazers","contributors_url":"https://api.github.com/repos/rust-lang/rust/contributors","subscribers_url":"https://api.github.com/repos/rust-lang/rust/subscribers","subscription_url":"https://api.github.com/repos/rust-lang/rust/subscription","commits_url":"https://api.github.com/repos/rust-lang/rust/commits{/sha}","git_commits_url":"https://api.github.com/repos/rust-lang/rust/git/commits{/sha}","comments_url":"https://api.github.com/repos/rust-lang/rust/comments{/number}","issue_comment_url":"https://api.github.com/repos/rust-lang/rust/issues/comments{/number}","contents_url":"https://api.github.com/repos/rust-lang/rust/contents/{+path}","compare_url":"https://api.github.com/repos/rust-lang/rust/compare/{base}...{head}","merges_url":"https://api.github.com/repos/rust-lang/rust/merges","archive_url":"https://api.github.com/repos/rust-lang/rust/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/rust-lang/rust/downloads","issues_url":"https://api.github.com/repos/rust-lang/rust/issues{/number}","pulls_url":"https://api.github.com/repos/rust-lang/rust/pulls{/number}","milestones_url":"https://api.github.com/repos/rust-lang/rust/milestones{/number}","notifications_url":"https://api.github.com/repos/rust-lang/rust/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/rust-lang/rust/labels{/name}","releases_url":"https://api.github.com/repos/rust-lang/rust/releases{/id}","deployments_url":"https://api.github.com/repos/rust-lang/rust/deployments","created_at":"2010-06-16T20:39:03Z","updated_at":"2016-03-17T17:41:10Z","pushed_at":"2016-03-17T18:08:45Z","git_url":"git://github.com/rust-lang/rust.git","ssh_url":"git@github.com:rust-lang/rust.git","clone_url":"https://github.com/rust-lang/rust.git","svn_url":"https://github.com/rust-lang/rust","homepage":"http://www.rust-lang.org","size":480194,"stargazers_count":15726,"watchers_count":15726,"language":"Rust","has_issues":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":3025,"mirror_url":null,"open_issues_count":2348,"forks":3025,"open_issues":2348,"watchers":15726,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/rust-lang/rust/pulls/32302"},"html":{"href":"https://github.com/rust-lang/rust/pull/32302"},"issue":{"href":"https://api.github.com/repos/rust-lang/rust/issues/32302"},"comments":{"href":"https://api.github.com/repos/rust-lang/rust/issues/32302/comments"},"review_comments":{"href":"https://api.github.com/repos/rust-lang/rust/pulls/32302/comments"},"review_comment":{"href":"https://api.github.com/repos/rust-lang/rust/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/rust-lang/rust/pulls/32302/commits"},"statuses":{"href":"https://api.github.com/repos/rust-lang/rust/statuses/4873202a024ee386e0170c0e7f03c04a49e2706f"}}}}