On 5/4/07, Maxim Veksler <[EMAIL PROTECTED]> wrote: > On 5/4/07, Jean-Paul Calderone <[EMAIL PROTECTED]> wrote: > > On Fri, 4 May 2007 13:04:41 +0300, Maxim Veksler <[EMAIL PROTECTED]> wrote: > > >Hi, > > > > > >I'm trying to write a non blocking socket port listener based on > > >poll() because select is limited to 1024 fd. > > > > > >Here is the code, it never gets to "I did not block" until I do a > > >telnet connection to port 10000. > > > > > > > What were you expecting? > > > > I'll try to explain. > I'm doing a little experiment: Capturing the whole tcp 1-65535 range > of the machine, allowing me to connect to the my service on the > machine on every port. I know that it's probably the most dumb thing > to do with TCP/IP communication please don't forget it's an > experiment.
[snip] I think I got it working now :) """ #!/usr/bin/env python import socket import select class PollingSocket(socket.socket): def __init__(self, port_number): self.__poll = select.poll() self.tcp_port_number = port_number socket.socket.__init__(self, socket.AF_INET, socket.SOCK_STREAM) self.setblocking(0) self.bind(('0.0.0.0', self.tcp_port_number)) self.listen(5) self.__poll.register(self) def poll(self, timeout = 0): return self.__poll.poll(timeout) def debugPollingSocket(port_num): print "BIND TO PORT: ", port_num return PollingSocket(port_num) all_sockets = map(debugPollingSocket, xrange(10000, 19169)) print "We have this in stock:" for nb_active_socket in all_sockets: print nb_active_socket.tcp_port_number while 1: for nb_active_socket in all_sockets: print "Asking", nb_active_socket.tcp_port_number if nb_active_socket.poll(0): print "Found", nb_active_socket.tcp_port_number conn, addr = nb_active_socket.accept() while 1: data = conn.recv(1024) if not data: break conn.send(data) conn.close() """ -- Cheers, Maxim Veksler "Free as in Freedom" - Do u GNU ? -- http://mail.python.org/mailman/listinfo/python-list