public void run()
		{
			SocketAddress	sender;
			SocketChannel	sch;
			OSCReceiver		rcv;
			OSCTransmitter	trns;
			
			try {
listen:			while( isListening )
				{
					try {
						sch		= ssch.accept();
						if( !isListening ) break listen;
						if( sch == null ) continue listen;

						sender	= sch.socket().getRemoteSocketAddress();
						
						synchronized( connSync ) {
							rcv		= OSCReceiver.newUsing( defaultCodec, sch );
							rcv.setBufferSize( bufSize );
							mapRcv.put( sender, rcv );
							trns	= OSCTransmitter.newUsing( defaultCodec, sch );
							trns.setBufferSize( bufSize );
//System.err.println ("put "+sender );
							mapTrns.put( sender, trns );
							rcv.dumpOSC( inMode, inStream );
							trns.dumpOSC( outMode, outStream );
							rcv.addOSCListener( this );
							rcv.startListening();
						}
					}
					catch( ClosedChannelException e11 ) {	// bye bye, we have to quit
						if( isListening ) {
							System.err.println( e11 );
						}
						return;
					}
					catch( IOException e1 ) {
						if( isListening ) {
							System.err.println( new OSCException( OSCException.RECEIVE, e1.toString() ));
						}
					}
				} // while( isListening )
			}
			finally {
				synchronized( threadSync ) {
					thread = null;
					threadSync.notifyAll();   // stopListening() might be waiting
				}
			}
		}