@@ -74,11 +74,12 @@ private void ConfigureConnectedSocket(Socket socket)
74
74
75
75
private void Connect ( Socket socket , EndPoint endPoint , CancellationToken cancellationToken )
76
76
{
77
+ var connected = false ;
77
78
var cancelled = false ;
78
79
var timedOut = false ;
79
80
80
- using ( var registration = cancellationToken . Register ( ( ) => { cancelled = true ; try { socket . Close ( ) ; } catch { } } ) )
81
- using ( var timer = new Timer ( _ => { timedOut = true ; try { socket . Close ( ) ; } catch { } } , null , _settings . ConnectTimeout , Timeout . InfiniteTimeSpan ) )
81
+ using ( var registration = cancellationToken . Register ( ( ) => { if ( ! connected ) { cancelled = true ; try { socket . Close ( ) ; } catch { } } } ) )
82
+ using ( var timer = new Timer ( _ => { if ( ! connected ) { timedOut = true ; try { socket . Close ( ) ; } catch { } } } , null , _settings . ConnectTimeout , Timeout . InfiniteTimeSpan ) )
82
83
{
83
84
try
84
85
{
@@ -92,6 +93,8 @@ private void Connect(Socket socket, EndPoint endPoint, CancellationToken cancell
92
93
{
93
94
socket . Connect ( endPoint ) ;
94
95
}
96
+ connected = true ;
97
+ return ;
95
98
}
96
99
catch
97
100
{
@@ -102,6 +105,11 @@ private void Connect(Socket socket, EndPoint endPoint, CancellationToken cancell
102
105
}
103
106
}
104
107
108
+ if ( socket . Connected )
109
+ {
110
+ try { socket . Close ( ) ; } catch { }
111
+ }
112
+
105
113
cancellationToken . ThrowIfCancellationRequested ( ) ;
106
114
if ( timedOut )
107
115
{
@@ -112,11 +120,12 @@ private void Connect(Socket socket, EndPoint endPoint, CancellationToken cancell
112
120
113
121
private async Task ConnectAsync ( Socket socket , EndPoint endPoint , CancellationToken cancellationToken )
114
122
{
123
+ var connected = false ;
115
124
var cancelled = false ;
116
125
var timedOut = false ;
117
126
118
- using ( var registration = cancellationToken . Register ( ( ) => { cancelled = true ; try { socket . Close ( ) ; } catch { } } ) )
119
- using ( var timer = new Timer ( _ => { timedOut = true ; try { socket . Close ( ) ; } catch { } } , null , _settings . ConnectTimeout , Timeout . InfiniteTimeSpan ) )
127
+ using ( var registration = cancellationToken . Register ( ( ) => { if ( ! connected ) { cancelled = true ; try { socket . Close ( ) ; } catch { } } } ) )
128
+ using ( var timer = new Timer ( _ => { if ( ! connected ) { timedOut = true ; try { socket . Close ( ) ; } catch { } } } , null , _settings . ConnectTimeout , Timeout . InfiniteTimeSpan ) )
120
129
{
121
130
try
122
131
{
@@ -130,6 +139,8 @@ private async Task ConnectAsync(Socket socket, EndPoint endPoint, CancellationTo
130
139
{
131
140
await Task . Factory . FromAsync ( socket . BeginConnect ( endPoint , null , null ) , socket . EndConnect ) . ConfigureAwait ( false ) ;
132
141
}
142
+ connected = true ;
143
+ return ;
133
144
}
134
145
catch
135
146
{
@@ -140,6 +151,11 @@ private async Task ConnectAsync(Socket socket, EndPoint endPoint, CancellationTo
140
151
}
141
152
}
142
153
154
+ if ( socket . Connected )
155
+ {
156
+ try { socket . Close ( ) ; } catch { }
157
+ }
158
+
143
159
cancellationToken . ThrowIfCancellationRequested ( ) ;
144
160
if ( timedOut )
145
161
{
0 commit comments