Source code for M2Crypto.SSL.timeout

"""Support for SSL socket timeouts.

Copyright (c) 1999-2003 Ng Pheng Siong. All rights reserved.

Copyright 2008 Heikki Toivonen. All rights reserved.
"""

__all__ = [
    "DEFAULT_TIMEOUT",
    "timeout",
    "struct_to_timeout",
    "struct_size",
]

import sys
import struct

from M2Crypto import m2

DEFAULT_TIMEOUT: int = 600


[docs] class timeout(object): sec: int microsec: int def __init__(self, sec: int = DEFAULT_TIMEOUT, microsec: int = 0) -> None: self.sec = sec self.microsec = microsec
[docs] def pack(self) -> bytes: if sys.platform == "win32": millisec = int(self.sec * 1000 + round(float(self.microsec) / 1000)) binstr = struct.pack("l", millisec) else: if m2.time_t_bits() == 32: binstr = struct.pack("ii", self.sec, self.microsec) else: binstr = struct.pack("ll", self.sec, self.microsec) return binstr
[docs] def struct_to_timeout(binstr: bytes) -> timeout: if sys.platform == "win32": millisec = struct.unpack("l", binstr)[0] # On py3, int/int performs exact division and returns float. We want # the whole number portion of the exact division result: sec = int(millisec / 1000) microsec = (millisec % 1000) * 1000 else: (sec, microsec) = struct.unpack("ll", binstr) return timeout(sec, microsec)
[docs] def struct_size() -> int: if sys.platform == "win32": return struct.calcsize("l") else: return struct.calcsize("ll")