Messages in this thread | | | Date | Sun, 10 Nov 2013 11:48:07 +0100 | Subject | Re: Cross thread shutdown of connected UDP socket, unexpected recvfrom behavior | From | Richard Weinberger <> |
| |
On Sun, Nov 10, 2013 at 2:32 AM, mpb <mpb.mail@gmail.com> wrote: > Hi LKML, > > I have a C/pthreads program with two threads ("main" and "thread"). > "thread" calls recvfrom on a connected UDP socket and blocks, waiting > for input. "main" then calls shutdown SHUT_RD on the socket. In > "thread", recvfrom returns, apparently successfully, returning a zero > length string, and setting src_addr to a bogus(?) address family, > port, and source address. > > Is the above the correct behavior for recvfrom?
A return value of 0 means that the socket was shutdown.
> Here is output from my program. "main" sends "hello\0", then "" (the > empty string), then calls shutdown. "thread" receives "hello\0", "", > and then finally receives an empty string that was never sent! > > thread recvfrom: Success > rv 6 addrlen 16 fam 2 port 8000 addr 100007f > > thread recvfrom: Success > rv 0 addrlen 16 fam 2 port 8000 addr 100007f > > main shutdown: Success > rv 0 > > thread recvfrom: Success > rv 0 addrlen 16 fam 59060 port 44237 addr deaadef0 > > The source code (2k) for the porgram is attached. I'm running Ubuntu > 13.04, kernel 3.8.0-19-generic #30-Ubuntu, on 32-bit i686. > > For reference, this June 2000 LKML thread discusses calling close in a > similar situation. > http://www.gossamer-threads.com/lists/linux/kernel/144379 > > Please CC me if you have questions, otherwise I'll try to watch for > answers in the list archives. > > Thanks! > > -mpb
-- Thanks, //richard
| |