Martin: Thanks for the patch.. note that I will submit it to re for approval after a minor fix. socantrcvmore(so); assumes you do NOT hold a lock. This code holds the socket lock.. which is the recv sockbuf lock.. So if you turn witness on your kernel and run with this you will have a double lock.. panic. Note to fix this right you should have it be: SOCK_UNLOCK(so); + socantrcvmore(so); Which is what I will submit to release ops.. you may want to change this in what you are working with so you don;t have some other side-effect issue from the double lock.. like leaking sockets. R Martin Kulas wrote: > Hello! > > I patched netcat to support 1to1-SCTP sockets. > Netcat uses the poll() system call to wait for new data > in the socket buffer. The problem is that poll() does not > return when the kernel has closed the SCTP association. > Select() has the same problem. > > I digged around in the SCTP sources and created a patched to remove > that bug. The patch is a one-liner: > > <patch> > --- sctp_pcb.c.orig 2007-10-03 13:27:12.000000000 +0200 > +++ sctp_pcb.c 2007-10-03 15:51:55.286987000 +0200 > _at__at_ -4234,6 +4234,7 _at__at_ > SS_ISCONFIRMING | > SS_ISCONNECTED); > } > + socantrcvmore(so); > SOCK_UNLOCK(so); > sctp_sowwakeup(inp, so); > sctp_sorwakeup(inp, so); > </patch> > > Now I have no problems with the system calls select()/poll() anymore. > Is this patch OK or have I missed anything? > > > Regards, > Martin > -- Randall Stewart NSSTG - Cisco Systems Inc. 803-345-0369 <or> 803-317-4952 (cell)Received on Wed Oct 03 2007 - 21:20:00 UTC
This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:39:18 UTC