Socket timeout not honored with SSL



  • Has anyone faced issues with socket timeouts when using HTTPS connections?

    System information:
    sysname='GPy'
    nodename='GPy'
    release='1.18.2.r7'
    version='v1.8.6-849-df9f237 on 2019-05-14'
    machine='GPy with ESP32'

    When configuring a socket to use a timeout, if the socket has been wrapped with the ussl.wrap_socket method, the timeout is not honored.

    Given a socket sock which has been successfully connected to a host, trying to call sock.read should return None if the timeout is reached and there is nothing to read in the socket:

    import usocket
    
    sock = usocket.socket()
    sock.settimeout(5)
    
    sock.connect((host, port))
    
    t = sock.read(1)
    
    # after timeout, t is None
    print(t is None)
    

    But when the socket is wrapped with ussl, the timeout setting is ignored and read blocks forever:

    import usocket
    import ussl
    
    sock = usocket.socket()
    sock = ussl.wrap_socket(sock)
    sock.settimeout(5)
    
    sock.connect((host, port))
    
    # this hangs indefinitely
    t = sock.read(1)
    

    This also happens at least for the readline method.

    Take a look at this issue on Github:
    https://github.com/pycom/pycom-micropython-sigfox/issues/315


Log in to reply
 

Pycom on Twitter