Skip to content

Include IP information in socket.ConnectAsync(endPoint) exceptions - #37685

Closed
antonfirsov wants to merge 7 commits into
dotnet:masterfrom
antonfirsov:af/connect-better-SocketException
Closed

Include IP information in socket.ConnectAsync(endPoint) exceptions#37685
antonfirsov wants to merge 7 commits into
dotnet:masterfrom
antonfirsov:af/connect-better-SocketException

Conversation

@antonfirsov

@antonfirsovantonfirsov commented Jun 10, 2020

Copy link
Copy Markdown
Contributor

Unlike the synchronous variant, the exception message of SocketTaskExtensions.ConnectAsync(...) failures did not include the IP+Port information.

Related to #1326, but does not solve the issue for SocketsHttpHandler. It could be considered as a step towards the long-term solution however (see #1326 (comment)).

@ghost

Copy link
Copy Markdown

Tagging subscribers to this area: @dotnet/ncl
Notify danmosemsft if you want to be subscribed.

@antonfirsov
antonfirsov requested a review from a teamJune 10, 2020 01:55
@antonfirsov

Copy link
Copy Markdown
ContributorAuthor

/azp run runtime-libraries outerloop

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

}
}

[OuterLoop("Slow on Windows")]

@wfurtwfurtJun 19, 2020

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I did something like

using(Socketlistener=newSocket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp)){listener.Bind(newIPEndPoint(IPAddress.Loopback,10000));Console.WriteLine("Connecting {0}",DateTime.Now);varclientSocket=newSocket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);try{awaitclientSocket.ConnectAsync(listener.LocalEndPoint);}catch(Exceptionex){Console.WriteLine("Connect failed {0} {1}",ex.Message,DateTime.Now);}}

and I get this on Windows 10

Connecting 6/19/2020 10:48:07 AM
Connect failed No connection could be made because the target machine actively refused it. 6/19/2020 10:48:09 AM

it seems like it takes 2s to fail. That does not seems to bad.

public ConnectEap(ITestOutputHelper output) : base(output) {}

// We should skip this since the exception creation logic is defined in SocketHelperEap.
public override Task Connect_WhenFails_ThrowsSocketExceptionWithIPEndpointInfo(bool useDns) => Task.CompletedTask;

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Would it make sense to simply put the test function here?

EndPoint badEndpoint = useDns ? (EndPoint)new DnsEndPoint("localhost", 288) : new IPEndPoint(IPAddress.Loopback, 288);
using Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
SocketException ex = await Assert.ThrowsAnyAsync<SocketException>(() => ConnectAsync(client, badEndpoint));
Assert.Contains("127.0.0.1:288", ex.Message);

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It may be safer to bind on anonymous port like the example above. I think that would fit better existing test pattern.

if (!attemptSocket.ConnectAsync(args))
bool pending = attemptSocket.ConnectAsync(args);
// Copy the socket address so we can use it in exception message.
_userArgs!._socketAddress = _internalArgs!._socketAddress;

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is there reason why we don't use user supplied data? If we were connecting to name resolving to multiple addresses this would log just one, right?

@stephentoub

Copy link
Copy Markdown
Member

@antonfirsov, are you still working on this?

@antonfirsov

Copy link
Copy Markdown
ContributorAuthor

@stephentoub not right ATM, but I think the change in this PR still makes sense since the exception messages in sync and async connect variants do not match. Unless we state it explicitly that we don't want to spend team capacity for reviews here, I'd like to finish it since it's quite a small change, and comments were only concerned about test code so far.

@stephentoub

Copy link
Copy Markdown
Member

Ok, it's just been open with no progress for three months now. If all that remains to merge it is someone to review it, let's make that happen and get it merged (though I see @wfurt did review it and has feedback that hasn't been addressed), otherwise let's close it. Thanks.

@antonfirsov

Copy link
Copy Markdown
ContributorAuthor

Closing, since the code has been refactored into SocketAsyncEventArgs.DnsConnectAsync with #43661. However, we may want to consider adding IPEndpoint info to the exceptions created in that method for consistency with the synchronous variant.

@geoffkizer

Copy link
Copy Markdown
Contributor

If we think this is something we should address, let's make sure we have an issue to track it.

@ghostghost locked as resolved and limited conversation to collaborators Dec 8, 2020
@karelzkarelz added this to the 6.0.0 milestone Jan 26, 2021
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants

@antonfirsov@stephentoub@geoffkizer@wfurt@karelz@Dotnet-GitSync-Bot
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Include IP information in socket.ConnectAsync(endPoint) exceptions by antonfirsov · Pull Request #37685 · dotnet/runtime · GitHub
Skip to content

Include IP information in socket.ConnectAsync(endPoint) exceptions - #37685

Closed
antonfirsov wants to merge 7 commits into
dotnet:masterfrom
antonfirsov:af/connect-better-SocketException
Closed

Include IP information in socket.ConnectAsync(endPoint) exceptions#37685
antonfirsov wants to merge 7 commits into
dotnet:masterfrom
antonfirsov:af/connect-better-SocketException

Conversation

@antonfirsov

@antonfirsovantonfirsov commented Jun 10, 2020

Copy link
Copy Markdown
Contributor

Unlike the synchronous variant, the exception message of SocketTaskExtensions.ConnectAsync(...) failures did not include the IP+Port information.

Related to #1326, but does not solve the issue for SocketsHttpHandler. It could be considered as a step towards the long-term solution however (see #1326 (comment)).

@ghost

Copy link
Copy Markdown

Tagging subscribers to this area: @dotnet/ncl
Notify danmosemsft if you want to be subscribed.

@antonfirsov
antonfirsov requested a review from a teamJune 10, 2020 01:55
@antonfirsov

Copy link
Copy Markdown
ContributorAuthor

/azp run runtime-libraries outerloop

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

}
}

[OuterLoop("Slow on Windows")]

@wfurtwfurtJun 19, 2020

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I did something like

using(Socketlistener=newSocket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp)){listener.Bind(newIPEndPoint(IPAddress.Loopback,10000));Console.WriteLine("Connecting {0}",DateTime.Now);varclientSocket=newSocket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);try{awaitclientSocket.ConnectAsync(listener.LocalEndPoint);}catch(Exceptionex){Console.WriteLine("Connect failed {0} {1}",ex.Message,DateTime.Now);}}

and I get this on Windows 10

Connecting 6/19/2020 10:48:07 AM
Connect failed No connection could be made because the target machine actively refused it. 6/19/2020 10:48:09 AM

it seems like it takes 2s to fail. That does not seems to bad.

public ConnectEap(ITestOutputHelper output) : base(output) {}

// We should skip this since the exception creation logic is defined in SocketHelperEap.
public override Task Connect_WhenFails_ThrowsSocketExceptionWithIPEndpointInfo(bool useDns) => Task.CompletedTask;

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Would it make sense to simply put the test function here?

EndPoint badEndpoint = useDns ? (EndPoint)new DnsEndPoint("localhost", 288) : new IPEndPoint(IPAddress.Loopback, 288);
using Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
SocketException ex = await Assert.ThrowsAnyAsync<SocketException>(() => ConnectAsync(client, badEndpoint));
Assert.Contains("127.0.0.1:288", ex.Message);

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It may be safer to bind on anonymous port like the example above. I think that would fit better existing test pattern.

if (!attemptSocket.ConnectAsync(args))
bool pending = attemptSocket.ConnectAsync(args);
// Copy the socket address so we can use it in exception message.
_userArgs!._socketAddress = _internalArgs!._socketAddress;

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is there reason why we don't use user supplied data? If we were connecting to name resolving to multiple addresses this would log just one, right?

@stephentoub

Copy link
Copy Markdown
Member

@antonfirsov, are you still working on this?

@antonfirsov

Copy link
Copy Markdown
ContributorAuthor

@stephentoub not right ATM, but I think the change in this PR still makes sense since the exception messages in sync and async connect variants do not match. Unless we state it explicitly that we don't want to spend team capacity for reviews here, I'd like to finish it since it's quite a small change, and comments were only concerned about test code so far.

@stephentoub

Copy link
Copy Markdown
Member

Ok, it's just been open with no progress for three months now. If all that remains to merge it is someone to review it, let's make that happen and get it merged (though I see @wfurt did review it and has feedback that hasn't been addressed), otherwise let's close it. Thanks.

@antonfirsov

Copy link
Copy Markdown
ContributorAuthor

Closing, since the code has been refactored into SocketAsyncEventArgs.DnsConnectAsync with #43661. However, we may want to consider adding IPEndpoint info to the exceptions created in that method for consistency with the synchronous variant.

@geoffkizer

Copy link
Copy Markdown
Contributor

If we think this is something we should address, let's make sure we have an issue to track it.

@ghostghost locked as resolved and limited conversation to collaborators Dec 8, 2020
@karelzkarelz added this to the 6.0.0 milestone Jan 26, 2021
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants

@antonfirsov@stephentoub@geoffkizer@wfurt@karelz@Dotnet-GitSync-Bot
, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Include IP information in socket.ConnectAsync(endPoint) exceptions by antonfirsov · Pull Request #37685 · dotnet/runtime · GitHub
Skip to content

Include IP information in socket.ConnectAsync(endPoint) exceptions - #37685

Closed
antonfirsov wants to merge 7 commits into
dotnet:masterfrom
antonfirsov:af/connect-better-SocketException
Closed

Include IP information in socket.ConnectAsync(endPoint) exceptions#37685
antonfirsov wants to merge 7 commits into
dotnet:masterfrom
antonfirsov:af/connect-better-SocketException

Conversation

@antonfirsov

@antonfirsovantonfirsov commented Jun 10, 2020

Copy link
Copy Markdown
Contributor

Unlike the synchronous variant, the exception message of SocketTaskExtensions.ConnectAsync(...) failures did not include the IP+Port information.

Related to #1326, but does not solve the issue for SocketsHttpHandler. It could be considered as a step towards the long-term solution however (see #1326 (comment)).

@ghost

Copy link
Copy Markdown

Tagging subscribers to this area: @dotnet/ncl
Notify danmosemsft if you want to be subscribed.

@antonfirsov
antonfirsov requested a review from a teamJune 10, 2020 01:55
@antonfirsov

Copy link
Copy Markdown
ContributorAuthor

/azp run runtime-libraries outerloop

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

}
}

[OuterLoop("Slow on Windows")]

@wfurtwfurtJun 19, 2020

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I did something like

using(Socketlistener=newSocket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp)){listener.Bind(newIPEndPoint(IPAddress.Loopback,10000));Console.WriteLine("Connecting {0}",DateTime.Now);varclientSocket=newSocket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);try{awaitclientSocket.ConnectAsync(listener.LocalEndPoint);}catch(Exceptionex){Console.WriteLine("Connect failed {0} {1}",ex.Message,DateTime.Now);}}

and I get this on Windows 10

Connecting 6/19/2020 10:48:07 AM
Connect failed No connection could be made because the target machine actively refused it. 6/19/2020 10:48:09 AM

it seems like it takes 2s to fail. That does not seems to bad.

public ConnectEap(ITestOutputHelper output) : base(output) {}

// We should skip this since the exception creation logic is defined in SocketHelperEap.
public override Task Connect_WhenFails_ThrowsSocketExceptionWithIPEndpointInfo(bool useDns) => Task.CompletedTask;

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Would it make sense to simply put the test function here?

EndPoint badEndpoint = useDns ? (EndPoint)new DnsEndPoint("localhost", 288) : new IPEndPoint(IPAddress.Loopback, 288);
using Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
SocketException ex = await Assert.ThrowsAnyAsync<SocketException>(() => ConnectAsync(client, badEndpoint));
Assert.Contains("127.0.0.1:288", ex.Message);

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It may be safer to bind on anonymous port like the example above. I think that would fit better existing test pattern.

if (!attemptSocket.ConnectAsync(args))
bool pending = attemptSocket.ConnectAsync(args);
// Copy the socket address so we can use it in exception message.
_userArgs!._socketAddress = _internalArgs!._socketAddress;

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is there reason why we don't use user supplied data? If we were connecting to name resolving to multiple addresses this would log just one, right?

@stephentoub

Copy link
Copy Markdown
Member

@antonfirsov, are you still working on this?

@antonfirsov

Copy link
Copy Markdown
ContributorAuthor

@stephentoub not right ATM, but I think the change in this PR still makes sense since the exception messages in sync and async connect variants do not match. Unless we state it explicitly that we don't want to spend team capacity for reviews here, I'd like to finish it since it's quite a small change, and comments were only concerned about test code so far.

@stephentoub

Copy link
Copy Markdown
Member

Ok, it's just been open with no progress for three months now. If all that remains to merge it is someone to review it, let's make that happen and get it merged (though I see @wfurt did review it and has feedback that hasn't been addressed), otherwise let's close it. Thanks.

@antonfirsov

Copy link
Copy Markdown
ContributorAuthor

Closing, since the code has been refactored into SocketAsyncEventArgs.DnsConnectAsync with #43661. However, we may want to consider adding IPEndpoint info to the exceptions created in that method for consistency with the synchronous variant.

@geoffkizer

Copy link
Copy Markdown
Contributor

If we think this is something we should address, let's make sure we have an issue to track it.

@ghostghost locked as resolved and limited conversation to collaborators Dec 8, 2020
@karelzkarelz added this to the 6.0.0 milestone Jan 26, 2021
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants

@antonfirsov@stephentoub@geoffkizer@wfurt@karelz@Dotnet-GitSync-Bot
, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Include IP information in socket.ConnectAsync(endPoint) exceptions by antonfirsov · Pull Request #37685 · dotnet/runtime · GitHub
Skip to content

Include IP information in socket.ConnectAsync(endPoint) exceptions - #37685

Closed
antonfirsov wants to merge 7 commits into
dotnet:masterfrom
antonfirsov:af/connect-better-SocketException
Closed

Include IP information in socket.ConnectAsync(endPoint) exceptions#37685
antonfirsov wants to merge 7 commits into
dotnet:masterfrom
antonfirsov:af/connect-better-SocketException

Conversation

@antonfirsov

@antonfirsovantonfirsov commented Jun 10, 2020

Copy link
Copy Markdown
Contributor

Unlike the synchronous variant, the exception message of SocketTaskExtensions.ConnectAsync(...) failures did not include the IP+Port information.

Related to #1326, but does not solve the issue for SocketsHttpHandler. It could be considered as a step towards the long-term solution however (see #1326 (comment)).

@ghost

Copy link
Copy Markdown

Tagging subscribers to this area: @dotnet/ncl
Notify danmosemsft if you want to be subscribed.

@antonfirsov
antonfirsov requested a review from a teamJune 10, 2020 01:55
@antonfirsov

Copy link
Copy Markdown
ContributorAuthor

/azp run runtime-libraries outerloop

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

}
}

[OuterLoop("Slow on Windows")]

@wfurtwfurtJun 19, 2020

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I did something like

using(Socketlistener=newSocket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp)){listener.Bind(newIPEndPoint(IPAddress.Loopback,10000));Console.WriteLine("Connecting {0}",DateTime.Now);varclientSocket=newSocket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);try{awaitclientSocket.ConnectAsync(listener.LocalEndPoint);}catch(Exceptionex){Console.WriteLine("Connect failed {0} {1}",ex.Message,DateTime.Now);}}

and I get this on Windows 10

Connecting 6/19/2020 10:48:07 AM
Connect failed No connection could be made because the target machine actively refused it. 6/19/2020 10:48:09 AM

it seems like it takes 2s to fail. That does not seems to bad.

public ConnectEap(ITestOutputHelper output) : base(output) {}

// We should skip this since the exception creation logic is defined in SocketHelperEap.
public override Task Connect_WhenFails_ThrowsSocketExceptionWithIPEndpointInfo(bool useDns) => Task.CompletedTask;

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Would it make sense to simply put the test function here?

EndPoint badEndpoint = useDns ? (EndPoint)new DnsEndPoint("localhost", 288) : new IPEndPoint(IPAddress.Loopback, 288);
using Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
SocketException ex = await Assert.ThrowsAnyAsync<SocketException>(() => ConnectAsync(client, badEndpoint));
Assert.Contains("127.0.0.1:288", ex.Message);

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It may be safer to bind on anonymous port like the example above. I think that would fit better existing test pattern.

if (!attemptSocket.ConnectAsync(args))
bool pending = attemptSocket.ConnectAsync(args);
// Copy the socket address so we can use it in exception message.
_userArgs!._socketAddress = _internalArgs!._socketAddress;

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is there reason why we don't use user supplied data? If we were connecting to name resolving to multiple addresses this would log just one, right?

@stephentoub

Copy link
Copy Markdown
Member

@antonfirsov, are you still working on this?

@antonfirsov

Copy link
Copy Markdown
ContributorAuthor

@stephentoub not right ATM, but I think the change in this PR still makes sense since the exception messages in sync and async connect variants do not match. Unless we state it explicitly that we don't want to spend team capacity for reviews here, I'd like to finish it since it's quite a small change, and comments were only concerned about test code so far.

@stephentoub

Copy link
Copy Markdown
Member

Ok, it's just been open with no progress for three months now. If all that remains to merge it is someone to review it, let's make that happen and get it merged (though I see @wfurt did review it and has feedback that hasn't been addressed), otherwise let's close it. Thanks.

@antonfirsov

Copy link
Copy Markdown
ContributorAuthor

Closing, since the code has been refactored into SocketAsyncEventArgs.DnsConnectAsync with #43661. However, we may want to consider adding IPEndpoint info to the exceptions created in that method for consistency with the synchronous variant.

@geoffkizer

Copy link
Copy Markdown
Contributor

If we think this is something we should address, let's make sure we have an issue to track it.

@ghostghost locked as resolved and limited conversation to collaborators Dec 8, 2020
@karelzkarelz added this to the 6.0.0 milestone Jan 26, 2021
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants

@antonfirsov@stephentoub@geoffkizer@wfurt@karelz@Dotnet-GitSync-Bot
, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' Include IP information in socket.ConnectAsync(endPoint) exceptions by antonfirsov · Pull Request #37685 · dotnet/runtime · GitHub
Skip to content

Include IP information in socket.ConnectAsync(endPoint) exceptions - #37685

Closed
antonfirsov wants to merge 7 commits into
dotnet:masterfrom
antonfirsov:af/connect-better-SocketException
Closed

Include IP information in socket.ConnectAsync(endPoint) exceptions#37685
antonfirsov wants to merge 7 commits into
dotnet:masterfrom
antonfirsov:af/connect-better-SocketException

Conversation

@antonfirsov

@antonfirsovantonfirsov commented Jun 10, 2020

Copy link
Copy Markdown
Contributor

Unlike the synchronous variant, the exception message of SocketTaskExtensions.ConnectAsync(...) failures did not include the IP+Port information.

Related to #1326, but does not solve the issue for SocketsHttpHandler. It could be considered as a step towards the long-term solution however (see #1326 (comment)).

@ghost

Copy link
Copy Markdown

Tagging subscribers to this area: @dotnet/ncl
Notify danmosemsft if you want to be subscribed.

@antonfirsov
antonfirsov requested a review from a teamJune 10, 2020 01:55
@antonfirsov

Copy link
Copy Markdown
ContributorAuthor

/azp run runtime-libraries outerloop

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

}
}

[OuterLoop("Slow on Windows")]

@wfurtwfurtJun 19, 2020

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I did something like

using(Socketlistener=newSocket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp)){listener.Bind(newIPEndPoint(IPAddress.Loopback,10000));Console.WriteLine("Connecting {0}",DateTime.Now);varclientSocket=newSocket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);try{awaitclientSocket.ConnectAsync(listener.LocalEndPoint);}catch(Exceptionex){Console.WriteLine("Connect failed {0} {1}",ex.Message,DateTime.Now);}}

and I get this on Windows 10

Connecting 6/19/2020 10:48:07 AM
Connect failed No connection could be made because the target machine actively refused it. 6/19/2020 10:48:09 AM

it seems like it takes 2s to fail. That does not seems to bad.

public ConnectEap(ITestOutputHelper output) : base(output) {}

// We should skip this since the exception creation logic is defined in SocketHelperEap.
public override Task Connect_WhenFails_ThrowsSocketExceptionWithIPEndpointInfo(bool useDns) => Task.CompletedTask;

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Would it make sense to simply put the test function here?

EndPoint badEndpoint = useDns ? (EndPoint)new DnsEndPoint("localhost", 288) : new IPEndPoint(IPAddress.Loopback, 288);
using Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
SocketException ex = await Assert.ThrowsAnyAsync<SocketException>(() => ConnectAsync(client, badEndpoint));
Assert.Contains("127.0.0.1:288", ex.Message);

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It may be safer to bind on anonymous port like the example above. I think that would fit better existing test pattern.

if (!attemptSocket.ConnectAsync(args))
bool pending = attemptSocket.ConnectAsync(args);
// Copy the socket address so we can use it in exception message.
_userArgs!._socketAddress = _internalArgs!._socketAddress;

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is there reason why we don't use user supplied data? If we were connecting to name resolving to multiple addresses this would log just one, right?

@stephentoub

Copy link
Copy Markdown
Member

@antonfirsov, are you still working on this?

@antonfirsov

Copy link
Copy Markdown
ContributorAuthor

@stephentoub not right ATM, but I think the change in this PR still makes sense since the exception messages in sync and async connect variants do not match. Unless we state it explicitly that we don't want to spend team capacity for reviews here, I'd like to finish it since it's quite a small change, and comments were only concerned about test code so far.

@stephentoub

Copy link
Copy Markdown
Member

Ok, it's just been open with no progress for three months now. If all that remains to merge it is someone to review it, let's make that happen and get it merged (though I see @wfurt did review it and has feedback that hasn't been addressed), otherwise let's close it. Thanks.

@antonfirsov

Copy link
Copy Markdown
ContributorAuthor

Closing, since the code has been refactored into SocketAsyncEventArgs.DnsConnectAsync with #43661. However, we may want to consider adding IPEndpoint info to the exceptions created in that method for consistency with the synchronous variant.

@geoffkizer

Copy link
Copy Markdown
Contributor

If we think this is something we should address, let's make sure we have an issue to track it.

@ghostghost locked as resolved and limited conversation to collaborators Dec 8, 2020
@karelzkarelz added this to the 6.0.0 milestone Jan 26, 2021
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants

@antonfirsov@stephentoub@geoffkizer@wfurt@karelz@Dotnet-GitSync-Bot
, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Include IP information in socket.ConnectAsync(endPoint) exceptions by antonfirsov · Pull Request #37685 · dotnet/runtime · GitHub
Skip to content

Include IP information in socket.ConnectAsync(endPoint) exceptions - #37685

Closed
antonfirsov wants to merge 7 commits into
dotnet:masterfrom
antonfirsov:af/connect-better-SocketException
Closed

Include IP information in socket.ConnectAsync(endPoint) exceptions#37685
antonfirsov wants to merge 7 commits into
dotnet:masterfrom
antonfirsov:af/connect-better-SocketException

Conversation

@antonfirsov

@antonfirsovantonfirsov commented Jun 10, 2020

Copy link
Copy Markdown
Contributor

Unlike the synchronous variant, the exception message of SocketTaskExtensions.ConnectAsync(...) failures did not include the IP+Port information.

Related to #1326, but does not solve the issue for SocketsHttpHandler. It could be considered as a step towards the long-term solution however (see #1326 (comment)).

@ghost

Copy link
Copy Markdown

Tagging subscribers to this area: @dotnet/ncl
Notify danmosemsft if you want to be subscribed.

@antonfirsov
antonfirsov requested a review from a teamJune 10, 2020 01:55
@antonfirsov

Copy link
Copy Markdown
ContributorAuthor

/azp run runtime-libraries outerloop

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

}
}

[OuterLoop("Slow on Windows")]

@wfurtwfurtJun 19, 2020

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I did something like

using(Socketlistener=newSocket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp)){listener.Bind(newIPEndPoint(IPAddress.Loopback,10000));Console.WriteLine("Connecting {0}",DateTime.Now);varclientSocket=newSocket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);try{awaitclientSocket.ConnectAsync(listener.LocalEndPoint);}catch(Exceptionex){Console.WriteLine("Connect failed {0} {1}",ex.Message,DateTime.Now);}}

and I get this on Windows 10

Connecting 6/19/2020 10:48:07 AM
Connect failed No connection could be made because the target machine actively refused it. 6/19/2020 10:48:09 AM

it seems like it takes 2s to fail. That does not seems to bad.

public ConnectEap(ITestOutputHelper output) : base(output) {}

// We should skip this since the exception creation logic is defined in SocketHelperEap.
public override Task Connect_WhenFails_ThrowsSocketExceptionWithIPEndpointInfo(bool useDns) => Task.CompletedTask;

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Would it make sense to simply put the test function here?

EndPoint badEndpoint = useDns ? (EndPoint)new DnsEndPoint("localhost", 288) : new IPEndPoint(IPAddress.Loopback, 288);
using Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
SocketException ex = await Assert.ThrowsAnyAsync<SocketException>(() => ConnectAsync(client, badEndpoint));
Assert.Contains("127.0.0.1:288", ex.Message);

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It may be safer to bind on anonymous port like the example above. I think that would fit better existing test pattern.

if (!attemptSocket.ConnectAsync(args))
bool pending = attemptSocket.ConnectAsync(args);
// Copy the socket address so we can use it in exception message.
_userArgs!._socketAddress = _internalArgs!._socketAddress;

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is there reason why we don't use user supplied data? If we were connecting to name resolving to multiple addresses this would log just one, right?

@stephentoub

Copy link
Copy Markdown
Member

@antonfirsov, are you still working on this?

@antonfirsov

Copy link
Copy Markdown
ContributorAuthor

@stephentoub not right ATM, but I think the change in this PR still makes sense since the exception messages in sync and async connect variants do not match. Unless we state it explicitly that we don't want to spend team capacity for reviews here, I'd like to finish it since it's quite a small change, and comments were only concerned about test code so far.

@stephentoub

Copy link
Copy Markdown
Member

Ok, it's just been open with no progress for three months now. If all that remains to merge it is someone to review it, let's make that happen and get it merged (though I see @wfurt did review it and has feedback that hasn't been addressed), otherwise let's close it. Thanks.

@antonfirsov

Copy link
Copy Markdown
ContributorAuthor

Closing, since the code has been refactored into SocketAsyncEventArgs.DnsConnectAsync with #43661. However, we may want to consider adding IPEndpoint info to the exceptions created in that method for consistency with the synchronous variant.

@geoffkizer

Copy link
Copy Markdown
Contributor

If we think this is something we should address, let's make sure we have an issue to track it.

@ghostghost locked as resolved and limited conversation to collaborators Dec 8, 2020
@karelzkarelz added this to the 6.0.0 milestone Jan 26, 2021
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants

@antonfirsov@stephentoub@geoffkizer@wfurt@karelz@Dotnet-GitSync-Bot
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Include IP information in socket.ConnectAsync(endPoint) exceptions by antonfirsov · Pull Request #37685 · dotnet/runtime · GitHub
Skip to content

Include IP information in socket.ConnectAsync(endPoint) exceptions - #37685

Closed
antonfirsov wants to merge 7 commits into
dotnet:masterfrom
antonfirsov:af/connect-better-SocketException
Closed

Include IP information in socket.ConnectAsync(endPoint) exceptions#37685
antonfirsov wants to merge 7 commits into
dotnet:masterfrom
antonfirsov:af/connect-better-SocketException

Conversation

@antonfirsov

@antonfirsovantonfirsov commented Jun 10, 2020

Copy link
Copy Markdown
Contributor

Unlike the synchronous variant, the exception message of SocketTaskExtensions.ConnectAsync(...) failures did not include the IP+Port information.

Related to #1326, but does not solve the issue for SocketsHttpHandler. It could be considered as a step towards the long-term solution however (see #1326 (comment)).

@ghost

Copy link
Copy Markdown

Tagging subscribers to this area: @dotnet/ncl
Notify danmosemsft if you want to be subscribed.

@antonfirsov
antonfirsov requested a review from a teamJune 10, 2020 01:55
@antonfirsov

Copy link
Copy Markdown
ContributorAuthor

/azp run runtime-libraries outerloop

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

}
}

[OuterLoop("Slow on Windows")]

@wfurtwfurtJun 19, 2020

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I did something like

using(Socketlistener=newSocket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp)){listener.Bind(newIPEndPoint(IPAddress.Loopback,10000));Console.WriteLine("Connecting {0}",DateTime.Now);varclientSocket=newSocket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);try{awaitclientSocket.ConnectAsync(listener.LocalEndPoint);}catch(Exceptionex){Console.WriteLine("Connect failed {0} {1}",ex.Message,DateTime.Now);}}

and I get this on Windows 10

Connecting 6/19/2020 10:48:07 AM
Connect failed No connection could be made because the target machine actively refused it. 6/19/2020 10:48:09 AM

it seems like it takes 2s to fail. That does not seems to bad.

public ConnectEap(ITestOutputHelper output) : base(output) {}

// We should skip this since the exception creation logic is defined in SocketHelperEap.
public override Task Connect_WhenFails_ThrowsSocketExceptionWithIPEndpointInfo(bool useDns) => Task.CompletedTask;

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Would it make sense to simply put the test function here?

EndPoint badEndpoint = useDns ? (EndPoint)new DnsEndPoint("localhost", 288) : new IPEndPoint(IPAddress.Loopback, 288);
using Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
SocketException ex = await Assert.ThrowsAnyAsync<SocketException>(() => ConnectAsync(client, badEndpoint));
Assert.Contains("127.0.0.1:288", ex.Message);

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It may be safer to bind on anonymous port like the example above. I think that would fit better existing test pattern.

if (!attemptSocket.ConnectAsync(args))
bool pending = attemptSocket.ConnectAsync(args);
// Copy the socket address so we can use it in exception message.
_userArgs!._socketAddress = _internalArgs!._socketAddress;

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is there reason why we don't use user supplied data? If we were connecting to name resolving to multiple addresses this would log just one, right?

@stephentoub

Copy link
Copy Markdown
Member

@antonfirsov, are you still working on this?

@antonfirsov

Copy link
Copy Markdown
ContributorAuthor

@stephentoub not right ATM, but I think the change in this PR still makes sense since the exception messages in sync and async connect variants do not match. Unless we state it explicitly that we don't want to spend team capacity for reviews here, I'd like to finish it since it's quite a small change, and comments were only concerned about test code so far.

@stephentoub

Copy link
Copy Markdown
Member

Ok, it's just been open with no progress for three months now. If all that remains to merge it is someone to review it, let's make that happen and get it merged (though I see @wfurt did review it and has feedback that hasn't been addressed), otherwise let's close it. Thanks.

@antonfirsov

Copy link
Copy Markdown
ContributorAuthor

Closing, since the code has been refactored into SocketAsyncEventArgs.DnsConnectAsync with #43661. However, we may want to consider adding IPEndpoint info to the exceptions created in that method for consistency with the synchronous variant.

@geoffkizer

Copy link
Copy Markdown
Contributor

If we think this is something we should address, let's make sure we have an issue to track it.

@ghostghost locked as resolved and limited conversation to collaborators Dec 8, 2020
@karelzkarelz added this to the 6.0.0 milestone Jan 26, 2021
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants

@antonfirsov@stephentoub@geoffkizer@wfurt@karelz@Dotnet-GitSync-Bot
, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); Include IP information in socket.ConnectAsync(endPoint) exceptions by antonfirsov · Pull Request #37685 · dotnet/runtime · GitHub
Skip to content

Include IP information in socket.ConnectAsync(endPoint) exceptions - #37685

Closed
antonfirsov wants to merge 7 commits into
dotnet:masterfrom
antonfirsov:af/connect-better-SocketException
Closed

Include IP information in socket.ConnectAsync(endPoint) exceptions#37685
antonfirsov wants to merge 7 commits into
dotnet:masterfrom
antonfirsov:af/connect-better-SocketException

Conversation

@antonfirsov

@antonfirsovantonfirsov commented Jun 10, 2020

Copy link
Copy Markdown
Contributor

Unlike the synchronous variant, the exception message of SocketTaskExtensions.ConnectAsync(...) failures did not include the IP+Port information.

Related to #1326, but does not solve the issue for SocketsHttpHandler. It could be considered as a step towards the long-term solution however (see #1326 (comment)).

@ghost

Copy link
Copy Markdown

Tagging subscribers to this area: @dotnet/ncl
Notify danmosemsft if you want to be subscribed.

@antonfirsov
antonfirsov requested a review from a teamJune 10, 2020 01:55
@antonfirsov

Copy link
Copy Markdown
ContributorAuthor

/azp run runtime-libraries outerloop

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

}
}

[OuterLoop("Slow on Windows")]

@wfurtwfurtJun 19, 2020

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I did something like

using(Socketlistener=newSocket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp)){listener.Bind(newIPEndPoint(IPAddress.Loopback,10000));Console.WriteLine("Connecting {0}",DateTime.Now);varclientSocket=newSocket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);try{awaitclientSocket.ConnectAsync(listener.LocalEndPoint);}catch(Exceptionex){Console.WriteLine("Connect failed {0} {1}",ex.Message,DateTime.Now);}}

and I get this on Windows 10

Connecting 6/19/2020 10:48:07 AM
Connect failed No connection could be made because the target machine actively refused it. 6/19/2020 10:48:09 AM

it seems like it takes 2s to fail. That does not seems to bad.

public ConnectEap(ITestOutputHelper output) : base(output) {}

// We should skip this since the exception creation logic is defined in SocketHelperEap.
public override Task Connect_WhenFails_ThrowsSocketExceptionWithIPEndpointInfo(bool useDns) => Task.CompletedTask;

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Would it make sense to simply put the test function here?

EndPoint badEndpoint = useDns ? (EndPoint)new DnsEndPoint("localhost", 288) : new IPEndPoint(IPAddress.Loopback, 288);
using Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
SocketException ex = await Assert.ThrowsAnyAsync<SocketException>(() => ConnectAsync(client, badEndpoint));
Assert.Contains("127.0.0.1:288", ex.Message);

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It may be safer to bind on anonymous port like the example above. I think that would fit better existing test pattern.

if (!attemptSocket.ConnectAsync(args))
bool pending = attemptSocket.ConnectAsync(args);
// Copy the socket address so we can use it in exception message.
_userArgs!._socketAddress = _internalArgs!._socketAddress;

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is there reason why we don't use user supplied data? If we were connecting to name resolving to multiple addresses this would log just one, right?

@stephentoub

Copy link
Copy Markdown
Member

@antonfirsov, are you still working on this?

@antonfirsov

Copy link
Copy Markdown
ContributorAuthor

@stephentoub not right ATM, but I think the change in this PR still makes sense since the exception messages in sync and async connect variants do not match. Unless we state it explicitly that we don't want to spend team capacity for reviews here, I'd like to finish it since it's quite a small change, and comments were only concerned about test code so far.

@stephentoub

Copy link
Copy Markdown
Member

Ok, it's just been open with no progress for three months now. If all that remains to merge it is someone to review it, let's make that happen and get it merged (though I see @wfurt did review it and has feedback that hasn't been addressed), otherwise let's close it. Thanks.

@antonfirsov

Copy link
Copy Markdown
ContributorAuthor

Closing, since the code has been refactored into SocketAsyncEventArgs.DnsConnectAsync with #43661. However, we may want to consider adding IPEndpoint info to the exceptions created in that method for consistency with the synchronous variant.

@geoffkizer

Copy link
Copy Markdown
Contributor

If we think this is something we should address, let's make sure we have an issue to track it.

@ghostghost locked as resolved and limited conversation to collaborators Dec 8, 2020
@karelzkarelz added this to the 6.0.0 milestone Jan 26, 2021
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants

@antonfirsov@stephentoub@geoffkizer@wfurt@karelz@Dotnet-GitSync-Bot