@@ -77,7 +77,9 @@ public class SocketFrameHandler : IFrameHandler
77
77
private readonly ITcpClient m_socket ;
78
78
private readonly NetworkBinaryWriter m_writer ;
79
79
private readonly object _semaphore = new object ( ) ;
80
+ private readonly object _sslLock = new object ( ) ;
80
81
private bool _closed ;
82
+ private bool _ssl = false ;
81
83
public SocketFrameHandler ( AmqpTcpEndpoint endpoint ,
82
84
Func < AddressFamily , ITcpClient > socketFactory ,
83
85
int connectionTimeout , int readTimeout , int writeTimeout )
@@ -108,6 +110,7 @@ public SocketFrameHandler(AmqpTcpEndpoint endpoint,
108
110
try
109
111
{
110
112
netstream = SslHelper . TcpUpgrade ( netstream , endpoint . Ssl ) ;
113
+ _ssl = true ;
111
114
}
112
115
catch ( Exception )
113
116
{
@@ -217,7 +220,7 @@ public void SendHeader()
217
220
nbw . Write ( ( byte ) Endpoint . Protocol . MajorVersion ) ;
218
221
nbw . Write ( ( byte ) Endpoint . Protocol . MinorVersion ) ;
219
222
}
220
- m_writer . Write ( ms . ToArray ( ) ) ;
223
+ Write ( ms . ToArray ( ) ) ;
221
224
}
222
225
223
226
public void WriteFrame ( OutboundFrame frame )
@@ -226,7 +229,7 @@ public void WriteFrame(OutboundFrame frame)
226
229
var nbw = new NetworkBinaryWriter ( ms ) ;
227
230
frame . WriteTo ( nbw ) ;
228
231
m_socket . Client . Poll ( m_writeableStateTimeout , SelectMode . SelectWrite ) ;
229
- m_writer . Write ( ms . ToArray ( ) ) ;
232
+ Write ( ms . ToArray ( ) ) ;
230
233
}
231
234
232
235
public void WriteFrameSet ( IList < OutboundFrame > frames )
@@ -235,7 +238,22 @@ public void WriteFrameSet(IList<OutboundFrame> frames)
235
238
var nbw = new NetworkBinaryWriter ( ms ) ;
236
239
foreach ( var f in frames ) f . WriteTo ( nbw ) ;
237
240
m_socket . Client . Poll ( m_writeableStateTimeout , SelectMode . SelectWrite ) ;
238
- m_writer . Write ( ms . ToArray ( ) ) ;
241
+ Write ( ms . ToArray ( ) ) ;
242
+ }
243
+
244
+ private void Write ( byte [ ] buffer )
245
+ {
246
+ if ( _ssl )
247
+ {
248
+ lock ( _sslLock )
249
+ {
250
+ m_writer . Write ( buffer ) ;
251
+ }
252
+ }
253
+ else
254
+ {
255
+ m_writer . Write ( buffer ) ;
256
+ }
239
257
}
240
258
241
259
private bool ShouldTryIPv6 ( AmqpTcpEndpoint endpoint )
0 commit comments