{"push_id":967320158,"size":30,"distinct_size":1,"ref":"refs/heads/remove_client","head":"42d3e793ca2c37b2fce6681cfc8f6d830422a0f1","before":"0cfaa43ab5901aa7a447a60891cd186a948096e5","commits":[{"sha":"91d71c7f6ccbd0590e2d70d4aecc6433c114905f","author":{"email":"e0dac66afd9fe1866a0ea9cd2cf9fd411dc13b08@microsoft.com","name":"Cory Rivera"},"message":"Add URI parsing to named pipe handle creation","distinct":false,"url":"https://api.github.com/repos/stephentoub/corefx/commits/91d71c7f6ccbd0590e2d70d4aecc6433c114905f"},{"sha":"5d9e72d546a8fe9b96dcbd776b9e578b20eae1f6","author":{"email":"e0dac66afd9fe1866a0ea9cd2cf9fd411dc13b08@microsoft.com","name":"Cory Rivera"},"message":"Add NP default path when using only server name in connection string","distinct":false,"url":"https://api.github.com/repos/stephentoub/corefx/commits/5d9e72d546a8fe9b96dcbd776b9e578b20eae1f6"},{"sha":"11cb6e86655e4ae4356003559b3985839659679a","author":{"email":"94274d0b635748ad8df96c0fc4f19e1ecd3f67e2@microsoft.com","name":"stephentoub"},"message":"Fix translation of a couple of errno values","distinct":false,"url":"https://api.github.com/repos/stephentoub/corefx/commits/11cb6e86655e4ae4356003559b3985839659679a"},{"sha":"30bd4b79185d83f269f6a6e432881998a0158178","author":{"email":"94274d0b635748ad8df96c0fc4f19e1ecd3f67e2@microsoft.com","name":"stephentoub"},"message":"Disable Unix workarounds for Connect'ing to multiple endpoints\n\nOn unix, once connect fails on a socket, that socket becomes unusable for further operations, including additional connect attempts.  This is at direct odds with Socket's instance Connect methods, some of which allow for multiple connect attempts, either due to multiple IPAddresses being provided or due to a string hostname / DnsEndPoint being provided that could then result in multiple IPAddresses to be tried.\n\nWe've explored multiple workarounds for this, all of which have problems.  The workaround still in the code involves creating a temporary socket for each address, connecting to it, and if that's successful then immediately disconnecting and connecting with the actual socket.  But that causes mayhem for a server not expecting that pattern, e.g. that fails if the client disconnects and attempts a reconnect.\n\nThis leaves us with a few choices, none of which are great:\n1. Remove the offending Connect instance methods.  Ideally they'd be replaced with static methods, which can be implemented with POSIX-compliant behavior.  But these methods are heavily used and work on Windows.\n2. Always throw from the instance Connect methods when there's a possibility that multiple addresses will be tried, e.g. from Connect(IPAddress[], ...) but also from Connect(EndPoint) if a DnsEndPoint is specified.  This will break a lot of existing code, but it's also predictable, and developers will know quickly when using a problematic API and move away from it to supported patterns.\n3. Throw from the Connect methods if multiple addresses are actually supplied, e.g. calling Connect(IPAddress[]) with an array of length 1 would work but an array of length 2 will fail. This will allow a lot more existing code to work, but it's also very unpredictable, e.g. if a string host is provided and gets mapped by DNS to a single IPAddress in the test environment but then multiple IPAddresses in the production environment, everything will work fine locally but then fail in production.\n4. When presented with multiple addresses, try the first one, and if it fails, then throw a PlatformNotSupportedException.  This may be slightly more predictable than (3), but is still unpredictable, e.g. if a DNS server returns addresses in a different quantity or order from another server.\n\nI'm torn between (2) and (3) (and maybe (4)).  This commit implements the more conservative (2), as I expect (3) would actually cause serious problems for deployments, but we can loosen from (2) to (3) if that turns out to be better.  In the meantime, we should also seriously explore adding static methods for v1 for the same functionality (developers can also write such code themselves), and write guidance and helpers folks can use in the meantime, e.g. pseudo-code:\n```C#\npublic static async Task<Socket> Connect(\n    AddressFamily addressFamily, SocketType socketType, ProtocolType protocolType,\n    IPAddress[] addresses, int port)\n{\n    Exception lastExc = null;\n    foreach (IPAddress address in addresses)\n    {\n        Socket s = new Socket(addressFamily, socketType, protocolType);\n        try\n        {\n            await s.ConnectAsync(address, port).ConfigureAwait(false);\n            return s;\n        }\n        catch (Exception exc)\n        {\n            lastExc = exc;\n        }\n    }\n\n    if (lastExc != null) throw lastExc;\n    throw new ArgumentException(\"No addresses provided\", \"addresses\");\n}\n```","distinct":false,"url":"https://api.github.com/repos/stephentoub/corefx/commits/30bd4b79185d83f269f6a6e432881998a0158178"},{"sha":"f69a6d73f8e4cbc97a79957322bd9f7303518bfd","author":{"email":"94274d0b635748ad8df96c0fc4f19e1ecd3f67e2@microsoft.com","name":"stephentoub"},"message":"Mark tests as PlatformSpecific for Windows\n\nNow that these Connect* APIs are throwing on Unix, marking a bunch of tests as Windows-only.  In doing so, I combined a bunch of tests using [Theory], so as to minimize boilerplate and the number of methods that need to be annotated as platform-specific.","distinct":false,"url":"https://api.github.com/repos/stephentoub/corefx/commits/f69a6d73f8e4cbc97a79957322bd9f7303518bfd"},{"sha":"01a220e4ced33dd804a655620e30e55b7940deb4","author":{"email":"94274d0b635748ad8df96c0fc4f19e1ecd3f67e2@microsoft.com","name":"stephentoub"},"message":"Make TcpClient.Connect with multiple endpoints work on Unix","distinct":false,"url":"https://api.github.com/repos/stephentoub/corefx/commits/01a220e4ced33dd804a655620e30e55b7940deb4"},{"sha":"e6583927f302b30172fa50407562a52b48c47c9b","author":{"email":"e0dac66afd9fe1866a0ea9cd2cf9fd411dc13b08@microsoft.com","name":"Cory Rivera"},"message":"Incorporate PR comments for string parsing","distinct":false,"url":"https://api.github.com/repos/stephentoub/corefx/commits/e6583927f302b30172fa50407562a52b48c47c9b"},{"sha":"9839f6e11636b4c63d472b1b5143c21d0decdde6","author":{"email":"e0dac66afd9fe1866a0ea9cd2cf9fd411dc13b08@microsoft.com","name":"Cory Rivera"},"message":"Merge branch 'master' of https://github.com/dotnet/corefx into corivera_NamedPipesURIParsing","distinct":false,"url":"https://api.github.com/repos/stephentoub/corefx/commits/9839f6e11636b4c63d472b1b5143c21d0decdde6"},{"sha":"356671c22f4ecfea0c087dd59ca0512a39040231","author":{"email":"94274d0b635748ad8df96c0fc4f19e1ecd3f67e2@microsoft.com","name":"stephentoub"},"message":"Improve perf of X509Certificate.GetHashCode/Equals\n\nEvery call to these (which happens a lot when calling Contains on a collection of them) was cloning an array.","distinct":false,"url":"https://api.github.com/repos/stephentoub/corefx/commits/356671c22f4ecfea0c087dd59ca0512a39040231"},{"sha":"f7f280bc61eb400cdadbdfd5d425cc16e6f1e095","author":{"email":"94274d0b635748ad8df96c0fc4f19e1ecd3f67e2@microsoft.com","name":"stephentoub"},"message":"Change Lists to HashSets to avoid lots of O(N) lookups\n\nWe're doing a ton of calls to ```List<X509Certificate>.Contains```.  Changing these to be ```HashSet<X509Certificate>.Contains``` makes a very measurable difference.","distinct":false,"url":"https://api.github.com/repos/stephentoub/corefx/commits/f7f280bc61eb400cdadbdfd5d425cc16e6f1e095"},{"sha":"7e46f17e92528d2cea66e4a59f1676f0d8198ce6","author":{"email":"0a64d801e9c9a4c0b032feabb5e728f05c3a2ece@microsoft.com","name":"Jose Perez Rodriguez"},"message":"Enable portable PDB generation for x-plat builds","distinct":false,"url":"https://api.github.com/repos/stephentoub/corefx/commits/7e46f17e92528d2cea66e4a59f1676f0d8198ce6"},{"sha":"65fa1710ebf14711a7ec9b03e00b24014e8e97eb","author":{"email":"94274d0b635748ad8df96c0fc4f19e1ecd3f67e2@microsoft.com","name":"stephentoub"},"message":"Use OpenSSL for cert chain verification in CurlHandler\n\nOur certificate chain verification includes the ability to check user store certificates in addition to the root store, but it's more expensive than the default verification provided by OpenSSL, which only includes the system store.  This commit modifies our CurlHandler's VerifyCertChain implementation to first use the OpenSSL implementation, and only fall back to ours if it fails, resulting in much faster processing in https cases.","distinct":false,"url":"https://api.github.com/repos/stephentoub/corefx/commits/65fa1710ebf14711a7ec9b03e00b24014e8e97eb"},{"sha":"47fcd7aa9458ceb3f78958b255708797852f8612","author":{"email":"e0dac66afd9fe1866a0ea9cd2cf9fd411dc13b08@microsoft.com","name":"Cory Rivera"},"message":"Merge pull request #5851 from dotnet/corivera_NamedPipesURIParsing\n\nAdd URI parsing to named pipe handle creation","distinct":false,"url":"https://api.github.com/repos/stephentoub/corefx/commits/47fcd7aa9458ceb3f78958b255708797852f8612"},{"sha":"fc7e20bfc67f58d1cd19c577f1fdbdd7260e173b","author":{"email":"0a64d801e9c9a4c0b032feabb5e728f05c3a2ece@microsoft.com","name":"Jose Perez Rodriguez"},"message":"Merge pull request #5911 from joperezr/EnablePortablePDBsXPlat\n\nEnable portable PDB generation for x-plat builds","distinct":false,"url":"https://api.github.com/repos/stephentoub/corefx/commits/fc7e20bfc67f58d1cd19c577f1fdbdd7260e173b"},{"sha":"8b430175dfd99062e7463e2a03bc35cd48044286","author":{"email":"94274d0b635748ad8df96c0fc4f19e1ecd3f67e2@microsoft.com","name":"stephentoub"},"message":"Address PR feedback","distinct":false,"url":"https://api.github.com/repos/stephentoub/corefx/commits/8b430175dfd99062e7463e2a03bc35cd48044286"},{"sha":"06cc137e5911bcbc020329da249e4745c224cac1","author":{"email":"3c99c16f55e6643c921f19ffc2b4cf154afe9730@microsoft.com","name":"Nate Amundson"},"message":"Add clean.sh for Linux dev workflow\n\nThis script provides a convenient way to clean the local dev environment\non Linux.  It provides options for removing the bin directory, the\npackages directory, the Tools directory, the NuGet package caches, all\nuntracked files under the src directory, and all of the above.\n\nThis change also utilizes the clean targets from BuildTools, and updates\nclean.cmd to exclude clean.log from being removed in the \"all\" option\nand check for errors from \"git clean\".","distinct":false,"url":"https://api.github.com/repos/stephentoub/corefx/commits/06cc137e5911bcbc020329da249e4745c224cac1"},{"sha":"9fe09bc080a404185ce73f65ca3757f4211f7b27","author":{"email":"3c99c16f55e6643c921f19ffc2b4cf154afe9730@microsoft.com","name":"Nate Amundson"},"message":"Merge pull request #4643 from naamunds/AddCleanSh\n\nAdd clean.sh for Linux dev workflow","distinct":false,"url":"https://api.github.com/repos/stephentoub/corefx/commits/9fe09bc080a404185ce73f65ca3757f4211f7b27"},{"sha":"cfe27039e05c3a782d86b7b0afd4ce09dc62f905","author":{"email":"0a64d801e9c9a4c0b032feabb5e728f05c3a2ece@microsoft.com","name":"Jose Perez Rodriguez"},"message":"Setting HOME variable on outerloop Unix runs so that restore works.","distinct":false,"url":"https://api.github.com/repos/stephentoub/corefx/commits/cfe27039e05c3a782d86b7b0afd4ce09dc62f905"},{"sha":"a242ce43f794fb851ee58d147190902dbfbf92b7","author":{"email":"fc74d4ad8232ae98bdbd9bb889414e6c461842ea@microsoft.com","name":"David Kean"},"message":"Update description of System.Text.Encoding.Web\n\nChanged the description to match the style of the other descriptions.","distinct":false,"url":"https://api.github.com/repos/stephentoub/corefx/commits/a242ce43f794fb851ee58d147190902dbfbf92b7"},{"sha":"4391a5a6beadd7eb689504de0f8e8e7904055745","author":{"email":"4d7b62f37874a0e0e9bb9c3c1eb77ca6f8b899fd@microsoft.com","name":"Matt Mitchell"},"message":"Merge pull request #5931 from joperezr/SetHomeForOuterloopRuns\n\nSetting HOME variable on outerloop Unix runs so that restore works.","distinct":false,"url":"https://api.github.com/repos/stephentoub/corefx/commits/4391a5a6beadd7eb689504de0f8e8e7904055745"}]}