cvs commit: src/sys/netipx ipx_pcb.c ipx_pcb.h ipx_usrreq.c spx_usrreq.c

Robert Watson rwatson at FreeBSD.org
Sat Mar 25 17:38:22 UTC 2006


On Sat, 25 Mar 2006, Robert Watson wrote:

>  Rework IPX/SPX socket and pcb reference model:
>
>  - Introduce invariant that all IPX/SPX sockets will have valid so_pcb
>    pointers to ipxpcb structures, and that for SPX, the control block
>    pointer will always be valid.  Don't attempt to free the socket or
>    pcb at various odd points, such as disconnect.
>
>  - Add a new ipxpcb flag, IPXP_DROPPED, which will be set in place of
>    freeing PCB's so that this invariant can be maintained.  This flag
>    is now checked instead of a NULL check in various socket protocol
>    calls.
>
>  - Introduce many assertions that this invariant holds.
>
>  - Various pieces of code, such as the SPX timer code, no longer needs
>    to jump through hoops in case it frees a PCB while running.
>
>  - Break out ipx_pcbfree() from ipx_pcbdetach().  Likewise
>    spx_pcbdetach().
>
>  - Comment on some SMP-related limitations to the SPX code.
>
>  - Update copyrights.

The SPX code seems not to properly implement having data sent via a socket be 
transmitted after the socket is closed, so attempting to use SPX without 
so_linger is actually not very reliable.  I'm not sure why this is the case, 
and may investigate fixing it, but was surprised to find this was the case.

Robert N M Watson


More information about the cvs-src mailing list