@@ -323,6 +323,11 @@ public NetPeer FirstPeer
323323 get { return _headPeer ; }
324324 }
325325
326+ /// <summary>
327+ /// Disconnect peers if HostUnreachable or NetworkUnreachable spawned (old behaviour 0.9.x was true)
328+ /// </summary>
329+ public bool DisconnectOnUnreachable = false ;
330+
326331 /// <summary>
327332 /// QoS channel count per message type (value must be between 1 and 64 channels)
328333 /// </summary>
@@ -492,20 +497,22 @@ internal int SendRaw(byte[] message, int start, int length, IPEndPoint remoteEnd
492497 result = _socket . SendTo ( message , start , length , remoteEndPoint , ref errorCode ) ;
493498 }
494499
495- NetPeer fromPeer ;
496500 switch ( errorCode )
497501 {
498502 case SocketError . MessageSize :
499503 NetDebug . Write ( NetLogLevel . Trace , "[SRD] 10040, datalen: {0}" , length ) ;
500504 return - 1 ;
505+
501506 case SocketError . HostUnreachable :
502- if ( TryGetPeer ( remoteEndPoint , out fromPeer ) )
503- DisconnectPeerForce ( fromPeer , DisconnectReason . HostUnreachable , errorCode , null ) ;
504- CreateEvent ( NetEvent . EType . Error , remoteEndPoint : remoteEndPoint , errorCode : errorCode ) ;
505- return - 1 ;
506507 case SocketError . NetworkUnreachable :
507- if ( TryGetPeer ( remoteEndPoint , out fromPeer ) )
508- DisconnectPeerForce ( fromPeer , DisconnectReason . NetworkUnreachable , errorCode , null ) ;
508+ if ( DisconnectOnUnreachable && TryGetPeer ( remoteEndPoint , out var fromPeer ) )
509+ {
510+ DisconnectPeerForce (
511+ fromPeer ,
512+ errorCode == SocketError . HostUnreachable ? DisconnectReason . HostUnreachable : DisconnectReason . NetworkUnreachable ,
513+ errorCode ,
514+ null ) ;
515+ }
509516 CreateEvent ( NetEvent . EType . Error , remoteEndPoint : remoteEndPoint , errorCode : errorCode ) ;
510517 return - 1 ;
511518 }
0 commit comments