socket.fileno() not available in esp8266, Please suggest some alternative

All ESP8266 boards running MicroPython.
Official boards are the Adafruit Huzzah and Feather boards.
Target audience: MicroPython users with an ESP8266 board.
Post Reply
srinivasa rao pedada
Posts: 6
Joined: Sun Sep 12, 2021 3:57 pm

socket.fileno() not available in esp8266, Please suggest some alternative

Post by srinivasa rao pedada » Fri Oct 15, 2021 4:21 am

Code: Select all

class poller:
    # A simple utility class to wait for incoming data to be
    # read on a socket.
    def __init__(self):
        if "poll" in dir(select):
            self.use_poll = True
            self.poller = select.poll()
        else:
            self.use_poll = False
        self.targets = {}

    def add(self, target, socket=None):
        if not socket:
            socket = target.sockets()
        if self.use_poll:
            self.poller.register(socket, select.POLLIN)
        # dbg("add device on fileno: %s" % socket.fileno() )
        self.targets[socket.fileno()] = target
        # dbg("size targets: %s" % len(self.targets))

    def remove(self, target, socket=None):
        if not socket:
            socket = target.sockets()
        if self.use_poll:
            self.poller.unregister(socket)
        # dbg("remove device on fileno: %s" % socket.fileno() )
        gc.collect()

    def poll(self, timeout=100):
        if self.use_poll:
            ready = self.poller.poll(timeout)
        else:
            ready = []
            if len(self.targets) > 0:
                (rlist, wlist, xlist) = select.select(
                    self.targets.keys(), [], [], timeout
                )
                ready = [(x, None) for x in rlist]

        for one_ready in ready:
            target = self.targets.get(one_ready[0].fileno(), None)
            dbg("Targets %s" % str(self.targets.keys()))
            if target:
                # dbg("get socket with fileno: %s" % str(one_ready[0].fileno()) +  " len: %s" % len(one_ready) + " selected: %s " % str(target.fileno()) )
                # update time
                target.do_read(one_ready[0])
For esp8266 and micropython version 1.17 socket.fileno() module is not available. Please suggest me an alternative.

Beormund
Posts: 7
Joined: Wed Jul 27, 2022 2:31 pm

Re: socket.fileno() not available in esp8266, Please suggest some alternative

Post by Beormund » Wed Oct 12, 2022 9:21 am

I used id(socket) on pico w. Maybe that works on esp8266.

Post Reply