@@ -89,7 +89,7 @@ public static Task<List<string>> ReadRequestAndSendResponseAsync(Socket server,
8989 return AcceptSocketAsync ( server , ( s , stream , reader , writer ) => ReadWriteAcceptedAsync ( s , reader , writer , response ) , options ) ;
9090 }
9191
92- public static async Task < List < string > > ReadWriteAcceptedAsync ( Socket s , StreamReader reader , StreamWriter writer , string response = null , bool shutdown = true )
92+ public static async Task < List < string > > ReadWriteAcceptedAsync ( Socket s , StreamReader reader , StreamWriter writer , string response = null )
9393 {
9494 // Read request line and headers. Skip any request body.
9595 var lines = new List < string > ( ) ;
@@ -101,11 +101,6 @@ public static async Task<List<string>> ReadWriteAcceptedAsync(Socket s, StreamRe
101101
102102 await writer . WriteAsync ( response ?? DefaultHttpResponse ) . ConfigureAwait ( false ) ;
103103
104- if ( shutdown )
105- {
106- s . Shutdown ( SocketShutdown . Send ) ;
107- }
108-
109104 return lines ;
110105 }
111106
@@ -157,7 +152,8 @@ private static string ComputeWebSocketHandshakeSecurityAcceptValue(string secWeb
157152 public static async Task < List < string > > AcceptSocketAsync ( Socket server , Func < Socket , Stream , StreamReader , StreamWriter , Task < List < string > > > funcAsync , Options options = null )
158153 {
159154 options = options ?? new Options ( ) ;
160- using ( Socket s = await server . AcceptAsync ( ) . ConfigureAwait ( false ) )
155+ Socket s = await server . AcceptAsync ( ) . ConfigureAwait ( false ) ;
156+ try
161157 {
162158 Stream stream = new NetworkStream ( s , ownsSocket : false ) ;
163159 if ( options . UseSsl )
@@ -166,9 +162,9 @@ public static async Task<List<string>> AcceptSocketAsync(Socket server, Func<Soc
166162 using ( var cert = Configuration . Certificates . GetServerCertificate ( ) )
167163 {
168164 await sslStream . AuthenticateAsServerAsync (
169- cert ,
165+ cert ,
170166 clientCertificateRequired : true , // allowed but not required
171- enabledSslProtocols : options . SslProtocols ,
167+ enabledSslProtocols : options . SslProtocols ,
172168 checkCertificateRevocation : false ) . ConfigureAwait ( false ) ;
173169 }
174170 stream = sslStream ;
@@ -180,6 +176,18 @@ await sslStream.AuthenticateAsServerAsync(
180176 return await funcAsync ( s , stream , reader , writer ) . ConfigureAwait ( false ) ;
181177 }
182178 }
179+ finally
180+ {
181+ try
182+ {
183+ s . Shutdown ( SocketShutdown . Send ) ;
184+ s . Dispose ( ) ;
185+ }
186+ catch ( ObjectDisposedException )
187+ {
188+ // In case the test itself disposes of the socket
189+ }
190+ }
183191 }
184192
185193 public enum TransferType
@@ -250,8 +258,6 @@ public static Task StartTransferTypeAndErrorServer(
250258 await writer . WriteAsync ( $ "{ content } \r \n ") . ConfigureAwait ( false ) ;
251259 }
252260
253- client . Shutdown ( SocketShutdown . Both ) ;
254-
255261 return null ;
256262 } ) , out localEndPoint ) ;
257263 }
0 commit comments