Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
dotNET Platform
runtime
提交
50ac454d
R
runtime
项目概览
dotNET Platform
/
runtime
11 个月 前同步成功
通知
1
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
runtime
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
50ac454d
编写于
10月 08, 2020
作者:
G
Geoff Kizer
提交者:
GitHub
10月 08, 2020
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix issue with duplicate completion in MultipleConnectAsync (#43112)
Co-authored-by:
N
Geoffrey Kizer
<
geoffrek@windows.microsoft.com
>
上级
c533b605
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
27 addition
and
12 deletion
+27
-12
src/libraries/System.Net.Sockets/src/System/Net/Sockets/MultipleConnectAsync.cs
...et.Sockets/src/System/Net/Sockets/MultipleConnectAsync.cs
+18
-10
src/libraries/System.Net.Sockets/src/System/Net/Sockets/SocketAsyncEventArgs.cs
...et.Sockets/src/System/Net/Sockets/SocketAsyncEventArgs.cs
+9
-2
未找到文件。
src/libraries/System.Net.Sockets/src/System/Net/Sockets/MultipleConnectAsync.cs
浏览文件 @
50ac454d
...
...
@@ -151,7 +151,7 @@ private bool DoDnsCallback(IAsyncResult result, bool sync)
}
else
if
(!
pending
)
{
return
DoConnectCallback
(
_internalArgs
!);
return
DoConnectCallback
(
_internalArgs
!
,
sync
);
}
else
{
...
...
@@ -161,13 +161,13 @@ private bool DoDnsCallback(IAsyncResult result, bool sync)
private
void
InternalConnectCallback
(
object
?
sender
,
SocketAsyncEventArgs
args
)
{
DoConnectCallback
(
args
);
DoConnectCallback
(
args
,
false
);
}
// Callback which fires when an internal connection attempt completes.
// If it failed and there are more addresses to try, do it.
// Returns true if the operation is pending, false if it completed synchronously.
private
bool
DoConnectCallback
(
SocketAsyncEventArgs
args
)
private
bool
DoConnectCallback
(
SocketAsyncEventArgs
args
,
bool
sync
)
{
Exception
?
exception
=
null
;
...
...
@@ -243,16 +243,14 @@ private bool DoConnectCallback(SocketAsyncEventArgs args)
}
}
if
(
exception
=
=
null
)
if
(
exception
!
=
null
)
{
Succeed
(
);
return
Fail
(
sync
,
exception
);
}
else
{
AsyncFail
(
exception
);
return
Succeed
(
sync
);
}
return
false
;
}
// Called to initiate a connection attempt to the next address in the list.
...
...
@@ -287,11 +285,21 @@ private bool DoConnectCallback(SocketAsyncEventArgs args)
protected
abstract
void
OnSucceed
();
private
void
Succeed
(
)
private
bool
Succeed
(
bool
sync
)
{
OnSucceed
();
_userArgs
!.
FinishWrapperConnectSuccess
(
_internalArgs
!.
ConnectSocket
,
_internalArgs
.
BytesTransferred
,
_internalArgs
.
SocketFlags
);
if
(
sync
)
{
_userArgs
!.
FinishWrapperConnectSyncSuccess
(
_internalArgs
!.
ConnectSocket
,
_internalArgs
.
BytesTransferred
,
_internalArgs
.
SocketFlags
);
}
else
{
_userArgs
!.
FinishWrapperConnectAsyncSuccess
(
_internalArgs
!.
ConnectSocket
,
_internalArgs
.
BytesTransferred
,
_internalArgs
.
SocketFlags
);
}
_internalArgs
.
Dispose
();
return
!
sync
;
}
protected
abstract
void
OnFail
(
bool
abortive
);
...
...
src/libraries/System.Net.Sockets/src/System/Net/Sockets/SocketAsyncEventArgs.cs
浏览文件 @
50ac454d
...
...
@@ -676,7 +676,7 @@ internal void FinishConnectByNameAsyncFailure(Exception exception, int bytesTran
}
}
internal
void
FinishWrapperConnectSuccess
(
Socket
?
connectSocket
,
int
bytesTransferred
,
SocketFlags
flags
)
internal
void
FinishWrapperConnectS
yncS
uccess
(
Socket
?
connectSocket
,
int
bytesTransferred
,
SocketFlags
flags
)
{
SetResults
(
SocketError
.
Success
,
bytesTransferred
,
flags
);
_currentSocket
=
connectSocket
;
...
...
@@ -685,8 +685,15 @@ internal void FinishWrapperConnectSuccess(Socket? connectSocket, int bytesTransf
if
(
SocketsTelemetry
.
Log
.
IsEnabled
())
LogBytesTransferEvents
(
connectSocket
?.
SocketType
,
SocketAsyncOperation
.
Connect
,
bytesTransferred
);
// Complete the operation and raise the event.
ExecutionContext
?
context
=
_context
;
// store context before it's cleared as part of completing the operation
Complete
();
}
internal
void
FinishWrapperConnectAsyncSuccess
(
Socket
?
connectSocket
,
int
bytesTransferred
,
SocketFlags
flags
)
{
ExecutionContext
?
context
=
_context
;
// store context before it's cleared as part of completing the operation
FinishWrapperConnectSyncSuccess
(
connectSocket
,
bytesTransferred
,
flags
);
if
(
context
==
null
)
{
OnCompletedInternal
();
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录