':Parameters:
- `address`: a (hostname, port) tuple
- `options`: a PoolOptions instance
- `handshake`: whether to call ismaster for each new SocketInfo'

def __init__(self, address, options, handshake=True):

    self._check_interval_seconds = 1
    self.sockets = set()
    self.lock = threading.Lock()
    self.active_sockets = 0
    self.pool_id = 0
    self.pid = os.getpid()
    self.address = address
    self.opts = options
    self.handshake = handshake
    if ((self.opts.wait_queue_multiple is None) or (self.opts.max_pool_size is None)):
        max_waiters = None
    else:
        max_waiters = (self.opts.max_pool_size * self.opts.wait_queue_multiple)
    self._socket_semaphore = thread_util.create_semaphore(self.opts.max_pool_size, max_waiters)
    self.socket_checker = SocketChecker()
