{"action":"created","comment":{"url":"https://api.github.com/repos/apple/swift-nio/pulls/comments/174775288","pull_request_review_id":104192607,"id":174775288,"diff_hunk":"@@ -726,4 +726,57 @@ class EchoServerClientTest : XCTestCase {\n \n         XCTAssertNoThrow(try promise.futureResult.wait())\n     }\n+\n+    func testPortNumbers() throws {\n+        var atLeastOneSucceeded = false\n+        for host in [\"127.0.0.1\", \"::1\"] {\n+            let group = MultiThreadedEventLoopGroup(numThreads: 1)\n+            defer {\n+                XCTAssertNoThrow(try group.syncShutdownGracefully())\n+            }\n+            let acceptedRemotePort: Atomic<Int> = Atomic(value: -1)\n+            let acceptedLocalPort: Atomic<Int> = Atomic(value: -2)\n+            let sem = DispatchSemaphore(value: 0)\n+\n+            let serverChannel: Channel\n+            do {\n+                serverChannel = try ServerBootstrap(group: group)\n+                    .serverChannelOption(ChannelOptions.socket(SocketOptionLevel(SOL_SOCKET), SO_REUSEADDR), value: 1)\n+                    .childChannelInitializer { channel in\n+                        acceptedRemotePort.store(channel.remoteAddress?.port.map(Int.init) ?? -3)\n+                        acceptedLocalPort.store(channel.localAddress?.port.map(Int.init) ?? -4)\n+                        sem.signal()\n+                        return channel.eventLoop.newSucceededFuture(result: ())\n+                    }.bind(host: host, port: 0).wait()\n+            } catch let e as SocketAddressError {\n+                if case .unknown(host, port: 0) = e {\n+                    /* this can happen if the system isn't configured for both IPv4 and IPv6 */\n+                    continue\n+                } else {\n+                    /* nope, that's a different socket error */\n+                    XCTFail(\"unexpected SocketAddressError: \\(e)\")\n+                    break\n+                }\n+            } catch {\n+                /* other unknown error */\n+                XCTFail(\"unexpected error: \\(error)\")\n+                break\n+            }\n+            atLeastOneSucceeded = true\n+            defer {\n+                _ = serverChannel.close()","path":"Tests/NIOTests/EchoServerClientTest.swift","position":42,"original_position":42,"commit_id":"2185811d53c2d08c0c7176e40eaa39fc56232521","original_commit_id":"2185811d53c2d08c0c7176e40eaa39fc56232521","user":{"login":"normanmaurer","id":439362,"avatar_url":"https://avatars3.githubusercontent.com/u/439362?v=4","gravatar_id":"","url":"https://api.github.com/users/normanmaurer","html_url":"https://github.com/normanmaurer","followers_url":"https://api.github.com/users/normanmaurer/followers","following_url":"https://api.github.com/users/normanmaurer/following{/other_user}","gists_url":"https://api.github.com/users/normanmaurer/gists{/gist_id}","starred_url":"https://api.github.com/users/normanmaurer/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/normanmaurer/subscriptions","organizations_url":"https://api.github.com/users/normanmaurer/orgs","repos_url":"https://api.github.com/users/normanmaurer/repos","events_url":"https://api.github.com/users/normanmaurer/events{/privacy}","received_events_url":"https://api.github.com/users/normanmaurer/received_events","type":"User","site_admin":false},"body":"@weissi I think we should wait here and check it not throws","created_at":"2018-03-15T13:10:47Z","updated_at":"2018-03-15T13:18:37Z","html_url":"https://github.com/apple/swift-nio/pull/167#discussion_r174775288","pull_request_url":"https://api.github.com/repos/apple/swift-nio/pulls/167","author_association":"MEMBER","_links":{"self":{"href":"https://api.github.com/repos/apple/swift-nio/pulls/comments/174775288"},"html":{"href":"https://github.com/apple/swift-nio/pull/167#discussion_r174775288"},"pull_request":{"href":"https://api.github.com/repos/apple/swift-nio/pulls/167"}}},"pull_request":{"url":"https://api.github.com/repos/apple/swift-nio/pulls/167","id":175235508,"html_url":"https://github.com/apple/swift-nio/pull/167","diff_url":"https://github.com/apple/swift-nio/pull/167.diff","patch_url":"https://github.com/apple/swift-nio/pull/167.patch","issue_url":"https://api.github.com/repos/apple/swift-nio/issues/167","number":167,"state":"open","locked":false,"title":"port numbers sin[6]_port are in network byte order","user":{"login":"weissi","id":624238,"avatar_url":"https://avatars2.githubusercontent.com/u/624238?v=4","gravatar_id":"","url":"https://api.github.com/users/weissi","html_url":"https://github.com/weissi","followers_url":"https://api.github.com/users/weissi/followers","following_url":"https://api.github.com/users/weissi/following{/other_user}","gists_url":"https://api.github.com/users/weissi/gists{/gist_id}","starred_url":"https://api.github.com/users/weissi/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/weissi/subscriptions","organizations_url":"https://api.github.com/users/weissi/orgs","repos_url":"https://api.github.com/users/weissi/repos","events_url":"https://api.github.com/users/weissi/events{/privacy}","received_events_url":"https://api.github.com/users/weissi/received_events","type":"User","site_admin":false},"body":"🙈\r\n\r\nMotivation:\r\n\r\nWe returned port numbers directly from the sockaddr structures but\r\nthey're in network byte order. Our code only read them correctly when\r\npresenting, oops.\r\n\r\nModifications:\r\n\r\nCorrected the port number reading and tested that.\r\n\r\nResult:\r\n\r\nPort numbers should now be correct.\r\n","created_at":"2018-03-15T12:30:18Z","updated_at":"2018-03-15T13:18:37Z","closed_at":null,"merged_at":null,"merge_commit_sha":"8d44870c35b9ebe5f2c7a788a0c2ccadb1b488fb","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[{"id":844994894,"url":"https://api.github.com/repos/apple/swift-nio/labels/patch-version-bump-only","name":"patch-version-bump-only","color":"DE76D2","default":false}],"milestone":null,"commits_url":"https://api.github.com/repos/apple/swift-nio/pulls/167/commits","review_comments_url":"https://api.github.com/repos/apple/swift-nio/pulls/167/comments","review_comment_url":"https://api.github.com/repos/apple/swift-nio/pulls/comments{/number}","comments_url":"https://api.github.com/repos/apple/swift-nio/issues/167/comments","statuses_url":"https://api.github.com/repos/apple/swift-nio/statuses/2185811d53c2d08c0c7176e40eaa39fc56232521","head":{"label":"weissi:jw-fix-port-numbers","ref":"jw-fix-port-numbers","sha":"2185811d53c2d08c0c7176e40eaa39fc56232521","user":{"login":"weissi","id":624238,"avatar_url":"https://avatars2.githubusercontent.com/u/624238?v=4","gravatar_id":"","url":"https://api.github.com/users/weissi","html_url":"https://github.com/weissi","followers_url":"https://api.github.com/users/weissi/followers","following_url":"https://api.github.com/users/weissi/following{/other_user}","gists_url":"https://api.github.com/users/weissi/gists{/gist_id}","starred_url":"https://api.github.com/users/weissi/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/weissi/subscriptions","organizations_url":"https://api.github.com/users/weissi/orgs","repos_url":"https://api.github.com/users/weissi/repos","events_url":"https://api.github.com/users/weissi/events{/privacy}","received_events_url":"https://api.github.com/users/weissi/received_events","type":"User","site_admin":false},"repo":{"id":123523477,"name":"swift-nio","full_name":"weissi/swift-nio","owner":{"login":"weissi","id":624238,"avatar_url":"https://avatars2.githubusercontent.com/u/624238?v=4","gravatar_id":"","url":"https://api.github.com/users/weissi","html_url":"https://github.com/weissi","followers_url":"https://api.github.com/users/weissi/followers","following_url":"https://api.github.com/users/weissi/following{/other_user}","gists_url":"https://api.github.com/users/weissi/gists{/gist_id}","starred_url":"https://api.github.com/users/weissi/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/weissi/subscriptions","organizations_url":"https://api.github.com/users/weissi/orgs","repos_url":"https://api.github.com/users/weissi/repos","events_url":"https://api.github.com/users/weissi/events{/privacy}","received_events_url":"https://api.github.com/users/weissi/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/weissi/swift-nio","description":"Event-driven network application framework for high performance protocol servers & clients, non-blocking.","fork":true,"url":"https://api.github.com/repos/weissi/swift-nio","forks_url":"https://api.github.com/repos/weissi/swift-nio/forks","keys_url":"https://api.github.com/repos/weissi/swift-nio/keys{/key_id}","collaborators_url":"https://api.github.com/repos/weissi/swift-nio/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/weissi/swift-nio/teams","hooks_url":"https://api.github.com/repos/weissi/swift-nio/hooks","issue_events_url":"https://api.github.com/repos/weissi/swift-nio/issues/events{/number}","events_url":"https://api.github.com/repos/weissi/swift-nio/events","assignees_url":"https://api.github.com/repos/weissi/swift-nio/assignees{/user}","branches_url":"https://api.github.com/repos/weissi/swift-nio/branches{/branch}","tags_url":"https://api.github.com/repos/weissi/swift-nio/tags","blobs_url":"https://api.github.com/repos/weissi/swift-nio/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/weissi/swift-nio/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/weissi/swift-nio/git/refs{/sha}","trees_url":"https://api.github.com/repos/weissi/swift-nio/git/trees{/sha}","statuses_url":"https://api.github.com/repos/weissi/swift-nio/statuses/{sha}","languages_url":"https://api.github.com/repos/weissi/swift-nio/languages","stargazers_url":"https://api.github.com/repos/weissi/swift-nio/stargazers","contributors_url":"https://api.github.com/repos/weissi/swift-nio/contributors","subscribers_url":"https://api.github.com/repos/weissi/swift-nio/subscribers","subscription_url":"https://api.github.com/repos/weissi/swift-nio/subscription","commits_url":"https://api.github.com/repos/weissi/swift-nio/commits{/sha}","git_commits_url":"https://api.github.com/repos/weissi/swift-nio/git/commits{/sha}","comments_url":"https://api.github.com/repos/weissi/swift-nio/comments{/number}","issue_comment_url":"https://api.github.com/repos/weissi/swift-nio/issues/comments{/number}","contents_url":"https://api.github.com/repos/weissi/swift-nio/contents/{+path}","compare_url":"https://api.github.com/repos/weissi/swift-nio/compare/{base}...{head}","merges_url":"https://api.github.com/repos/weissi/swift-nio/merges","archive_url":"https://api.github.com/repos/weissi/swift-nio/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/weissi/swift-nio/downloads","issues_url":"https://api.github.com/repos/weissi/swift-nio/issues{/number}","pulls_url":"https://api.github.com/repos/weissi/swift-nio/pulls{/number}","milestones_url":"https://api.github.com/repos/weissi/swift-nio/milestones{/number}","notifications_url":"https://api.github.com/repos/weissi/swift-nio/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/weissi/swift-nio/labels{/name}","releases_url":"https://api.github.com/repos/weissi/swift-nio/releases{/id}","deployments_url":"https://api.github.com/repos/weissi/swift-nio/deployments","created_at":"2018-03-02T03:09:39Z","updated_at":"2018-03-02T03:09:41Z","pushed_at":"2018-03-15T12:41:08Z","git_url":"git://github.com/weissi/swift-nio.git","ssh_url":"git@github.com:weissi/swift-nio.git","clone_url":"https://github.com/weissi/swift-nio.git","svn_url":"https://github.com/weissi/swift-nio","homepage":"","size":2873,"stargazers_count":0,"watchers_count":0,"language":"Swift","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":{"key":"apache-2.0","name":"Apache License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0"},"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"apple:master","ref":"master","sha":"79a87ab76acbf739f0ea99348b143aa4ccb9d1db","user":{"login":"apple","id":10639145,"avatar_url":"https://avatars0.githubusercontent.com/u/10639145?v=4","gravatar_id":"","url":"https://api.github.com/users/apple","html_url":"https://github.com/apple","followers_url":"https://api.github.com/users/apple/followers","following_url":"https://api.github.com/users/apple/following{/other_user}","gists_url":"https://api.github.com/users/apple/gists{/gist_id}","starred_url":"https://api.github.com/users/apple/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/apple/subscriptions","organizations_url":"https://api.github.com/users/apple/orgs","repos_url":"https://api.github.com/users/apple/repos","events_url":"https://api.github.com/users/apple/events{/privacy}","received_events_url":"https://api.github.com/users/apple/received_events","type":"Organization","site_admin":false},"repo":{"id":120498971,"name":"swift-nio","full_name":"apple/swift-nio","owner":{"login":"apple","id":10639145,"avatar_url":"https://avatars0.githubusercontent.com/u/10639145?v=4","gravatar_id":"","url":"https://api.github.com/users/apple","html_url":"https://github.com/apple","followers_url":"https://api.github.com/users/apple/followers","following_url":"https://api.github.com/users/apple/following{/other_user}","gists_url":"https://api.github.com/users/apple/gists{/gist_id}","starred_url":"https://api.github.com/users/apple/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/apple/subscriptions","organizations_url":"https://api.github.com/users/apple/orgs","repos_url":"https://api.github.com/users/apple/repos","events_url":"https://api.github.com/users/apple/events{/privacy}","received_events_url":"https://api.github.com/users/apple/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/apple/swift-nio","description":"Event-driven network application framework for high performance protocol servers & clients, non-blocking.","fork":false,"url":"https://api.github.com/repos/apple/swift-nio","forks_url":"https://api.github.com/repos/apple/swift-nio/forks","keys_url":"https://api.github.com/repos/apple/swift-nio/keys{/key_id}","collaborators_url":"https://api.github.com/repos/apple/swift-nio/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/apple/swift-nio/teams","hooks_url":"https://api.github.com/repos/apple/swift-nio/hooks","issue_events_url":"https://api.github.com/repos/apple/swift-nio/issues/events{/number}","events_url":"https://api.github.com/repos/apple/swift-nio/events","assignees_url":"https://api.github.com/repos/apple/swift-nio/assignees{/user}","branches_url":"https://api.github.com/repos/apple/swift-nio/branches{/branch}","tags_url":"https://api.github.com/repos/apple/swift-nio/tags","blobs_url":"https://api.github.com/repos/apple/swift-nio/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/apple/swift-nio/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/apple/swift-nio/git/refs{/sha}","trees_url":"https://api.github.com/repos/apple/swift-nio/git/trees{/sha}","statuses_url":"https://api.github.com/repos/apple/swift-nio/statuses/{sha}","languages_url":"https://api.github.com/repos/apple/swift-nio/languages","stargazers_url":"https://api.github.com/repos/apple/swift-nio/stargazers","contributors_url":"https://api.github.com/repos/apple/swift-nio/contributors","subscribers_url":"https://api.github.com/repos/apple/swift-nio/subscribers","subscription_url":"https://api.github.com/repos/apple/swift-nio/subscription","commits_url":"https://api.github.com/repos/apple/swift-nio/commits{/sha}","git_commits_url":"https://api.github.com/repos/apple/swift-nio/git/commits{/sha}","comments_url":"https://api.github.com/repos/apple/swift-nio/comments{/number}","issue_comment_url":"https://api.github.com/repos/apple/swift-nio/issues/comments{/number}","contents_url":"https://api.github.com/repos/apple/swift-nio/contents/{+path}","compare_url":"https://api.github.com/repos/apple/swift-nio/compare/{base}...{head}","merges_url":"https://api.github.com/repos/apple/swift-nio/merges","archive_url":"https://api.github.com/repos/apple/swift-nio/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/apple/swift-nio/downloads","issues_url":"https://api.github.com/repos/apple/swift-nio/issues{/number}","pulls_url":"https://api.github.com/repos/apple/swift-nio/pulls{/number}","milestones_url":"https://api.github.com/repos/apple/swift-nio/milestones{/number}","notifications_url":"https://api.github.com/repos/apple/swift-nio/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/apple/swift-nio/labels{/name}","releases_url":"https://api.github.com/repos/apple/swift-nio/releases{/id}","deployments_url":"https://api.github.com/repos/apple/swift-nio/deployments","created_at":"2018-02-06T17:47:31Z","updated_at":"2018-03-15T13:11:50Z","pushed_at":"2018-03-15T13:11:47Z","git_url":"git://github.com/apple/swift-nio.git","ssh_url":"git@github.com:apple/swift-nio.git","clone_url":"https://github.com/apple/swift-nio.git","svn_url":"https://github.com/apple/swift-nio","homepage":"","size":3550,"stargazers_count":3031,"watchers_count":3031,"language":"Swift","has_issues":true,"has_projects":false,"has_downloads":true,"has_wiki":false,"has_pages":true,"forks_count":107,"mirror_url":null,"archived":false,"open_issues_count":38,"license":{"key":"apache-2.0","name":"Apache License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0"},"forks":107,"open_issues":38,"watchers":3031,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/apple/swift-nio/pulls/167"},"html":{"href":"https://github.com/apple/swift-nio/pull/167"},"issue":{"href":"https://api.github.com/repos/apple/swift-nio/issues/167"},"comments":{"href":"https://api.github.com/repos/apple/swift-nio/issues/167/comments"},"review_comments":{"href":"https://api.github.com/repos/apple/swift-nio/pulls/167/comments"},"review_comment":{"href":"https://api.github.com/repos/apple/swift-nio/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/apple/swift-nio/pulls/167/commits"},"statuses":{"href":"https://api.github.com/repos/apple/swift-nio/statuses/2185811d53c2d08c0c7176e40eaa39fc56232521"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"normanmaurer"}}