Il modulo microsock

Creazione di un socket

Quando si crea un socket all'interno del programma (con socket.socket(...)) avvengono queste operazioni:

  1. viene effettivamente creato un vero socket (con stdsocket.socket(...)).

  2. viene creato anche un microsock.stacklesssocket. Questo nel suo costruttore fa queste operazioni:

    1. memorizza il vero socket.
    2. si crea e memorizza una istanza dell'oggetto microsock.dispatcher, che è una derivata di asyncore.dispatcher.

    3. microsock.dispatcher nel suo costruttore fa queste operazioni:

      1. memorizza il vero socket.
      2. la classe ha i membri connectChannel, acceptChannel e recvChannel.

      3. istanzia per recvChannel un Channel con micro_send = True.

      4. prepara una stringa buffer per i send e una lista di buffers per i sendto (sendBuffer e sendToBuffers)

      5. prepara una stringa buffer per i recv (readBufferString)

      6. TODO: non ci fa nulla con il membro readBufferList, va rimosso?

      7. prepara una costante maxreceivebuf = 65536

      8. memorizza se stesso nella mappa di asyncore (questo lo fa asyncore.dispatcher.__init__ => asyncore.dispatcher.set_socket => asyncore.dispatcher.add_channel)

      9. la sua rimozione dalla mappa avverrà con microsock.stacklesssocket.__del__ => microsock.dispatcher.close => asyncore.dispatcher.close => asyncore.dispatcher.del_channel

  3. viene restituito l'oggetto microsock.stacklesssocket.

In seguito tutte le chiamate __getattr__ al finto socket (cioè all'oggetto stacklesssocket ritornato) vengono inoltrate al dispatcher (esempi di queste chiamate sono s.listen, s.bind, ...) mentre le chiamate __setattr__ vengono memorizzate localmente. ???