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