My understanding is that connections are created asynchronously in a background thread, and that file descriptors are used to communicate between your threads and the zeromq io threads.
Does it do the same thing if you put a sleep in there, giving the zeromq io thread time to close the file descriptors? -Matt On 23 Aug 2013, at 7:05 am, Boaz Kelmer <[email protected]> wrote: > > Many attempts to connect()/disconnect() will eventually fail with EINVAL. > It seems that the number of successful connect()/disconnect() pairs is > somewhat correlated > with the number of allowed open file descriptors for the process, as if some > descriptors are > not closed: > > $ python dis.py > RLIMIT_NOFILE: soft=100, hard=200000 > 4623: Error: Invalid argument > > $ cat dis.py > > import sys > import socket > import resource > import zmq > > def main(): > ctx = zmq.Context() > s = ctx.socket(zmq.SUB) > s.setsockopt(zmq.SUBSCRIBE, "") > addr = "tcp://%s:6666" % socket.gethostname() > soft, hard = resource.getrlimit(resource.RLIMIT_NOFILE) > resource.setrlimit(resource.RLIMIT_NOFILE, (100, hard)) > soft, hard = resource.getrlimit(resource.RLIMIT_NOFILE) > print "RLIMIT_NOFILE: soft=%s, hard=%s" % (soft, hard) > for i in xrange(1000000): > try: > s.connect(addr) > s.disconnect(addr) > except Exception as ex: > print >> sys.stderr, "%d: Error: %s" % (i, ex) > return > > if __name__ == '__main__': > main() > > > _______________________________________________ > zeromq-dev mailing list > [email protected] > http://lists.zeromq.org/mailman/listinfo/zeromq-dev _______________________________________________ zeromq-dev mailing list [email protected] http://lists.zeromq.org/mailman/listinfo/zeromq-dev
