Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 27 Apr 2008 23:34:28 -0300
From:      "Martin Candurra" <martincad@gmail.com>
To:        freebsd-questions@freebsd.org
Subject:   Question behavior about socket syscall in release 6.2
Message-ID:  <2062979c0804271934v4208686dq5f02d9c2c21bde84@mail.gmail.com>

next in thread | raw e-mail | index | archive | help
I have found some weird behavior about the socket system call in freebsd
release 6.2.
The problem appears if I try to open more sockets than the ulimits allows:
the socket system call gets blocked instead of returning an EMFILE error.

This only happens to me in release 6.2 ( I tested in 7.0 but it works fine).
The following python script is what I have used to reproduce the issue:

import os
import socket
from random import randint
import sys
socketAddress = ("127.0.0.1", randint(20000, 30000))


s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind(socketAddress)
s.listen(1)

socketList = []
child = -1
for i in range(10000):

    child = os.fork()
    if (child):
        clientCon, address = s.accept()
        socketList.append(clientCon)
        os.waitpid(0, os.WNOHANG)
    else:
        print "child %d" % i
        clientSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        if (clientSocket==-1):
            print("client socket error")
        err = clientSocket.connect(socketAddress)
        if (err==-1):
            print("client connect error")
        break



Is there something I'm missing ? Can someone shed me some light about this ?

Thanks in advance.

Best regards.



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?2062979c0804271934v4208686dq5f02d9c2c21bde84>