rfc2217_server: transition from optparse to argparse
diff --git a/examples/rfc2217_server.py b/examples/rfc2217_server.py
index fb89627..a8685f4 100755
--- a/examples/rfc2217_server.py
+++ b/examples/rfc2217_server.py
@@ -3,7 +3,7 @@
 # redirect data from a TCP/IP connection to a serial port and vice versa
 # using RFC 2217
 #
-# (C) 2009 Chris Liechti <[email protected]>
+# (C) 2009-2015 Chris Liechti <[email protected]>
 #
 # SPDX-License-Identifier:    BSD-3-Clause
 
@@ -17,15 +17,15 @@
 import serial.rfc2217
 
 class Redirector(object):
-    def __init__(self, serial_instance, socket, debug=None):
+    def __init__(self, serial_instance, socket, debug=False):
         self.serial = serial_instance
         self.socket = socket
         self._write_lock = threading.Lock()
         self.rfc2217 = serial.rfc2217.PortManager(
-            self.serial,
-            self,
-            logger = (debug and logging.getLogger('rfc2217.server'))
-            )
+                self.serial,
+                self,
+                logger = logging.getLogger('rfc2217.server') if debug else None
+                )
         self.log = logging.getLogger('redirector')
 
     def statusline_poller(self):
@@ -35,7 +35,7 @@
             self.rfc2217.check_modem_lines()
         self.log.debug('status line poll thread terminated')
 
-    def shortcut(self):
+    def shortcircuit(self):
         """connect the serial port to the TCP port by copying everything
            from one side to the other"""
         self.alive = True
@@ -99,10 +99,9 @@
 
 
 if __name__ == '__main__':
-    import optparse
+    import argparse
 
-    parser = optparse.OptionParser(
-        usage = "%prog [options] port",
+    parser = argparse.ArgumentParser(
         description = "RFC 2217 Serial to Network (TCP/IP) redirector.",
         epilog = """\
 NOTE: no security measures are implemented. Anyone can remotely connect
@@ -112,52 +111,50 @@
 it waits for the next connect.
 """)
 
-    parser.add_option("-p", "--localport",
-        dest = "local_port",
-        action = "store",
-        type = 'int',
-        help = "local TCP port",
-        default = 2217
-    )
+    parser.add_argument('SERIALPORT')
 
-    parser.add_option("-v", "--verbose",
-        dest = "verbosity",
-        action = "count",
-        help = "print more diagnostic messages (option can be given multiple times)",
-        default = 0
-    )
+    parser.add_argument('-p', '--localport',
+            type=int,
+            help='local TCP port, default: %(default)s',
+            metavar='TCPPORT',
+            default=2217
+            )
 
-    (options, args) = parser.parse_args()
+    parser.add_argument('-v', '--verbose',
+            dest='verbosity',
+            action='count',
+            help='print more diagnostic messages (option can be given multiple times)',
+            default=0
+            )
 
-    if len(args) != 1:
-        parser.error('serial port name required as argument')
+    args = parser.parse_args()
 
-    if options.verbosity > 3:
-        options.verbosity = 3
+    if args.verbosity > 3:
+        args.verbosity = 3
     level = (
-        logging.WARNING,
-        logging.INFO,
-        logging.DEBUG,
-        logging.NOTSET,
-        )[options.verbosity]
+            logging.WARNING,
+            logging.INFO,
+            logging.DEBUG,
+            logging.NOTSET,
+            )[args.verbosity]
     logging.basicConfig(level=logging.INFO)
     logging.getLogger('root').setLevel(logging.INFO)
     logging.getLogger('rfc2217').setLevel(level)
 
     # connect to serial port
     ser = serial.Serial()
-    ser.port     = args[0]
+    ser.port = args.SERIALPORT
     ser.timeout  = 3     # required so that the reader thread can exit
 
     logging.info("RFC 2217 TCP/IP to Serial redirector - type Ctrl-C / BREAK to quit")
 
     try:
         ser.open()
-    except serial.SerialException, e:
-        logging.error("Could not open serial port %s: %s" % (ser.portstr, e))
+    except serial.SerialException as e:
+        logging.error("Could not open serial port %s: %s" % (ser.name, e))
         sys.exit(1)
 
-    logging.info("Serving serial port: %s" % (ser.portstr,))
+    logging.info("Serving serial port: %s" % (ser.name,))
     settings = ser.getSettingsDict()
     # reset control line as no _remote_ "terminal" has been connected yet
     ser.setDTR(False)
@@ -165,33 +162,33 @@
 
     srv = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
     srv.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
-    srv.bind( ('', options.local_port) )
+    srv.bind(('', args.localport))
     srv.listen(1)
-    logging.info("TCP/IP port: %s" % (options.local_port,))
+    logging.info("TCP/IP port: %s" % (args.localport,))
     while True:
         try:
             connection, addr = srv.accept()
             logging.info('Connected by %s:%s' % (addr[0], addr[1]))
-            connection.setsockopt( socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
+            connection.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
             ser.setRTS(True)
             ser.setDTR(True)
             # enter network <-> serial loop
             r = Redirector(
-                ser,
-                connection,
-                options.verbosity > 0
-            )
+                    ser,
+                    connection,
+                    args.verbosity > 0
+                    )
             try:
-                r.shortcut()
+                r.shortcircuit()
             finally:
                 logging.info('Disconnected')
                 r.stop()
                 connection.close()
                 ser.setDTR(False)
                 ser.setRTS(False)
-            # Restore port settings (may have been changed by RFC 2217 capable
-            # client)
-            ser.applySettingsDict(settings)
+                # Restore port settings (may have been changed by RFC 2217
+                # capable client)
+                ser.applySettingsDict(settings)
         except KeyboardInterrupt:
             break
         except socket.error as msg: