From nobody@FreeBSD.org  Fri Jul  4 10:43:31 2008
Return-Path: <nobody@FreeBSD.org>
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id D2D76106567D
	for <freebsd-gnats-submit@FreeBSD.org>; Fri,  4 Jul 2008 10:43:31 +0000 (UTC)
	(envelope-from nobody@FreeBSD.org)
Received: from www.freebsd.org (www.freebsd.org [IPv6:2001:4f8:fff6::21])
	by mx1.freebsd.org (Postfix) with ESMTP id C15C28FC1C
	for <freebsd-gnats-submit@FreeBSD.org>; Fri,  4 Jul 2008 10:43:31 +0000 (UTC)
	(envelope-from nobody@FreeBSD.org)
Received: from www.freebsd.org (localhost [127.0.0.1])
	by www.freebsd.org (8.14.2/8.14.2) with ESMTP id m64AhVfm093881
	for <freebsd-gnats-submit@FreeBSD.org>; Fri, 4 Jul 2008 10:43:31 GMT
	(envelope-from nobody@www.freebsd.org)
Received: (from nobody@localhost)
	by www.freebsd.org (8.14.2/8.14.1/Submit) id m64AhVjh093880;
	Fri, 4 Jul 2008 10:43:31 GMT
	(envelope-from nobody)
Message-Id: <200807041043.m64AhVjh093880@www.freebsd.org>
Date: Fri, 4 Jul 2008 10:43:31 GMT
From: Giampaolo Rodol <billiejoex@gmail.com>
To: freebsd-gnats-submit@FreeBSD.org
Subject: socket's SO_REUSEADDR option does not work
X-Send-Pr-Version: www-3.1
X-GNATS-Notify:

>Number:         125258
>Category:       kern
>Synopsis:       [socket] socket's SO_REUSEADDR option does not work
>Confidential:   no
>Severity:       non-critical
>Priority:       medium
>Responsible:    freebsd-net
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:  
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Fri Jul 04 10:50:01 UTC 2008
>Closed-Date:    
>Last-Modified:  Sun Jul 06 09:02:16 UTC 2008
>Originator:     Giampaolo Rodol
>Release:        7.0-RC1
>Organization:
>Environment:
FreeBSD dhcppc1 7.0-RC1
>Description:
When the SO_OOBINLINE option is used against a socket, out-of-band data
should be placed in the normal data input stream as it is received.
In fact this is what happens on Windows and Linux by using the Python script below.
On FreeBSD this does not happen. select instead of returning a
"readable" file descriptor returns an "exceptional" file descriptor. 
Later, when I try to read some data from the socket, the following
exception is raised:


Exception in thread Thread-1:
Traceback (most recent call last):
  File "/usr/local/lib/python2.5/threading.py", line 460, in __bootstrap
    self.run()
  File "/usr/local/lib/python2.5/threading.py", line 440, in run
    self.__target(*self.__args, **self.__kwargs)
  File "_test2.py", line 14, in server
    data = conn.recv(1024, socket.MSG_OOB)
error: (22, 'Invalid argument')





--- code ---

import socket, select, threading, time, os

def server():
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
    s.bind(('', 1024))
    s.listen(1)
    conn, addr = s.accept()
    conn.setblocking(0)
    conn.setsockopt(socket.SOL_SOCKET, socket.SO_OOBINLINE, 1)
    while 1:
        r, w, e = select.select([conn], [conn], [conn], 0.01)
        if r:
            # the socket is supposed to be in the "readable" list
            data = conn.recv(1024)
            print "read -> " + data
        if e:
            # ...but not in the "exception" list
            data = conn.recv(1024, socket.MSG_OOB)
            print "expt -> " + data


threading.Thread(target=server).start()
time.sleep(0.1)
s = socket.socket()
s.connect(('127.0.0.1', 1024))
s.sendall('x', socket.MSG_OOB)

--- /code ---
>How-To-Repeat:

>Fix:


>Release-Note:
>Audit-Trail:
Responsible-Changed-From-To: freebsd-i386->freebsd-net 
Responsible-Changed-By: remko 
Responsible-Changed-When: Fri Jul 4 14:50:44 UTC 2008 
Responsible-Changed-Why:  
reassign to -net 

http://www.freebsd.org/cgi/query-pr.cgi?pr=125258 
>Unformatted:
