Il modulo microsock
Creazione di un socket
Quando si crea un socket all'interno del programma (con socket.socket(...)) avvengono queste operazioni:
viene effettivamente creato un vero socket (con stdsocket.socket(...)).
viene creato anche un microsock.stacklesssocket. Questo nel suo costruttore fa queste operazioni:
- memorizza il vero socket.
si crea e memorizza una istanza dell'oggetto microsock.dispatcher, che è una derivata di asyncore.dispatcher.
microsock.dispatcher nel suo costruttore fa queste operazioni:
- memorizza il vero socket.
la classe ha i membri connectChannel, acceptChannel e recvChannel.
istanzia per recvChannel un Channel con micro_send = True.
prepara una stringa buffer per i send e una lista di buffers per i sendto (sendBuffer e sendToBuffers)
prepara una stringa buffer per i recv (readBufferString)
TODO: non ci fa nulla con il membro readBufferList, va rimosso?
prepara una costante maxreceivebuf = 65536
memorizza se stesso nella mappa di asyncore (questo lo fa asyncore.dispatcher.__init__ => asyncore.dispatcher.set_socket => asyncore.dispatcher.add_channel)
la sua rimozione dalla mappa avverrà con microsock.stacklesssocket.__del__ => microsock.dispatcher.close => asyncore.dispatcher.close => asyncore.dispatcher.del_channel
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. ???