{"action":"created","issue":{"url":"https://api.github.com/repos/dotnet/corefx/issues/4484","labels_url":"https://api.github.com/repos/dotnet/corefx/issues/4484/labels{/name}","comments_url":"https://api.github.com/repos/dotnet/corefx/issues/4484/comments","events_url":"https://api.github.com/repos/dotnet/corefx/issues/4484/events","html_url":"https://github.com/dotnet/corefx/pull/4484","id":116686278,"number":4484,"title":"Implement Ping on Unix.","user":{"login":"mellinoe","id":8918977,"avatar_url":"https://avatars.githubusercontent.com/u/8918977?v=3","gravatar_id":"","url":"https://api.github.com/users/mellinoe","html_url":"https://github.com/mellinoe","followers_url":"https://api.github.com/users/mellinoe/followers","following_url":"https://api.github.com/users/mellinoe/following{/other_user}","gists_url":"https://api.github.com/users/mellinoe/gists{/gist_id}","starred_url":"https://api.github.com/users/mellinoe/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mellinoe/subscriptions","organizations_url":"https://api.github.com/users/mellinoe/orgs","repos_url":"https://api.github.com/users/mellinoe/repos","events_url":"https://api.github.com/users/mellinoe/events{/privacy}","received_events_url":"https://api.github.com/users/mellinoe/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/dotnet/corefx/labels/2%20-%20In%20Progress","name":"2 - In Progress","color":"CCCCCC"},{"url":"https://api.github.com/repos/dotnet/corefx/labels/cla-already-signed","name":"cla-already-signed","color":"009800"},{"url":"https://api.github.com/repos/dotnet/corefx/labels/System.Net","name":"System.Net","color":"d4c5f9"},{"url":"https://api.github.com/repos/dotnet/corefx/labels/X-Plat","name":"X-Plat","color":"fbca04"}],"state":"open","locked":false,"assignee":null,"milestone":{"url":"https://api.github.com/repos/dotnet/corefx/milestones/6","html_url":"https://github.com/dotnet/corefx/milestones/1.0.0-rc2","labels_url":"https://api.github.com/repos/dotnet/corefx/milestones/6/labels","id":1365455,"number":6,"title":"1.0.0-rc2","description":"","creator":{"login":"joshfree","id":1302850,"avatar_url":"https://avatars.githubusercontent.com/u/1302850?v=3","gravatar_id":"","url":"https://api.github.com/users/joshfree","html_url":"https://github.com/joshfree","followers_url":"https://api.github.com/users/joshfree/followers","following_url":"https://api.github.com/users/joshfree/following{/other_user}","gists_url":"https://api.github.com/users/joshfree/gists{/gist_id}","starred_url":"https://api.github.com/users/joshfree/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/joshfree/subscriptions","organizations_url":"https://api.github.com/users/joshfree/orgs","repos_url":"https://api.github.com/users/joshfree/repos","events_url":"https://api.github.com/users/joshfree/events{/privacy}","received_events_url":"https://api.github.com/users/joshfree/received_events","type":"User","site_admin":false},"open_issues":144,"closed_issues":74,"state":"open","created_at":"2015-10-20T04:29:15Z","updated_at":"2015-11-14T21:04:15Z","due_on":"2016-02-03T08:00:00Z","closed_at":null},"comments":7,"created_at":"2015-11-13T02:22:34Z","updated_at":"2015-11-15T02:20:29Z","closed_at":null,"pull_request":{"url":"https://api.github.com/repos/dotnet/corefx/pulls/4484","html_url":"https://github.com/dotnet/corefx/pull/4484","diff_url":"https://github.com/dotnet/corefx/pull/4484.diff","patch_url":"https://github.com/dotnet/corefx/pull/4484.patch"},"body":"This implements System.Net.Utilities on Unix. The implementation is shared between Unix platforms, and should work anywhere that either supports raw sockets or has a discoverable \"ping\" utility.\r\n\r\nThere are two \"modes\" in which a Ping can be sent on Unix. If the user has privileges to create and use raw sockets, then the \"good\" path is taken. The good path uses raw sockets to send ICMP echo requests to the given host, and then listens for ICMP echo replies. If the user does not have privileges to do so, then the implementation simply launches a new process using the ping or ping6 utility program (depending on whether the destination address is an IPv4 or IPv6 address), parses the output, and returns the result. The information from the \"bad path\" is less reliable, and doesn't include things like the IPStatus property, which should be able to cover most of the possible ICMP response message types, not just \"Success\". Additionally, the \"bad path\" cannot send arbitrary buffers along with the echo request, although we can at least preserve the size of the data. This means you can't inspect the PingReply and see that the same data you sent in the echo request was returned unchanged.\r\n\r\nThere are a couple of additions to the Sockets PAL and shim in order to accomodate the ICMP protocol which I'm using in the \"good path\" described above.\r\n\r\n@cipop, @stephentoub, @pgavlin "},"comment":{"url":"https://api.github.com/repos/dotnet/corefx/issues/comments/156770983","html_url":"https://github.com/dotnet/corefx/pull/4484#issuecomment-156770983","issue_url":"https://api.github.com/repos/dotnet/corefx/issues/4484","id":156770983,"user":{"login":"mellinoe","id":8918977,"avatar_url":"https://avatars.githubusercontent.com/u/8918977?v=3","gravatar_id":"","url":"https://api.github.com/users/mellinoe","html_url":"https://github.com/mellinoe","followers_url":"https://api.github.com/users/mellinoe/followers","following_url":"https://api.github.com/users/mellinoe/following{/other_user}","gists_url":"https://api.github.com/users/mellinoe/gists{/gist_id}","starred_url":"https://api.github.com/users/mellinoe/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mellinoe/subscriptions","organizations_url":"https://api.github.com/users/mellinoe/orgs","repos_url":"https://api.github.com/users/mellinoe/repos","events_url":"https://api.github.com/users/mellinoe/events{/privacy}","received_events_url":"https://api.github.com/users/mellinoe/received_events","type":"User","site_admin":false},"created_at":"2015-11-15T02:20:29Z","updated_at":"2015-11-15T02:20:29Z","body":"The Linux tests seemed to hit a timing issue where the call to Process.Kill() threw a Win32Exception, which seems to mean that the process was already exiting. I've added another commit that just ignores that exception, because all we care about is that we aren't leaving behind a zombie process."}}