Socket related stuff - patch available for testing

Edward O'Callaghan eocallaghan at
Wed Nov 11 20:10:11 PST 2009

Looks good Matt,

Just my quick review,
I didn't notice anything obvious, although patch is fairly large.


2009/11/12 Matthew Dillon <dillon at>:
>    Here's a patch, it needs some serious testing:
>        fetch
>    The patch:
>        * Moves the socket pointer into the netmsg base structure, even
>          though some things don't use it, I know
>        * Adds a lwkt_port pointer to the socket structure and initializes
>          it to cpu0_soport()
>        * Expects network protocols to set so->so_port in their attach
>          functions, plus I do that for tcp and udp.
>        * Performs message chasing when the protocol port changes due to
>          e.g.  a connect() or an implied connect or (I think) also an
>          implied binding to INADDR_ANY.
>          If a number of messages for a socket have built up on a protocol
>          thread and some operation in the protocol changes the socket's
>          protocol thread (aka implied connect), then any other messages
>          queued to that protocol thread, or new messages which race the
>          change, will automatically be forwarded to the correct protocol
>          thread when they are encountered.
>        * Fixes implied connects for TCP.  This is when you use sendmsg()
>          with an address to imply a connect along with data, so data can
>          be sent along with the SYN.
>          Implied connects were completely broken and would crash the kernel.
>          Example:  finger user at target  (instant crash).  finger uses the
>          implied connect feature.
>        * Cleans up a bunch of stuff.  I was almost able to remove
>          the proto->pr_mport field entirely but sendmsg() still needs
>          to use it in the case where the passed address is non-NULL (aka
>          sendto() style).  All other code that used to call proto->pr_mport()
>          now simply snarf the port out of so->so_port.
>          The mport functions themselves now basically just return so_port.
>          I left the sendmsg code intact just in case we wanted to optimize
>          it later on for UDP.
>    I found a few other bugs in the code but haven't fixed them yet.  UDP
>    is not MPSAFE due to the global inpcbinfo (udbinfo) structure it uses.
>    This patch does need testing.  I don't know what I might have blown up.
>    It's fairly straight forward so I would also appreciate a code review.
>                                                -Matt

Edward O'Callaghan
eocallaghan at auroraux dot org

More information about the Kernel mailing list