Date: Mon, 7 May 2001 02:10:14 -0700 From: "Jonathan Graehl" <jonathan@graehl.org> To: <freebsd-net@freebsd.org> Subject: Do I need to close after shutdown if I don't want to leak descriptors? (making sure TCP retransmits all my data) Message-ID: <000001c0d6d5$87607e80$6dfeac40@straylight.com>
next in thread | raw e-mail | index | archive | help
Scenario: I accept a (TCP) connection, write some data, close the connection. Problem: close() does not perform an orderly shutdown, does not resend unacknowledged data - responds with RST to data/acks sent to me Non-solution: SO_LINGER, makes close into a blocking call in order to get orderly shutdown Incomplete solution: shutdown(SHUT_RDWR), but then what? Will the OS close the fd for me once the other end acknowledges, or better yet, closes its end as well, or do I need to close the fd? If so, how can I be notified when the other end acknowledges up to FIN (or timeout) in order to do so? (selecting for readable is not a solution; if they have sent me data I am uninterested in reading, I will select readable) Obviously, if shutdown fails (it shouldn't, I die on failure), you would need to close to avoid descriptor leakage. But do I need to babysit the descriptor after I have no more interest in it? Is there a ps-like tool with which I can easily inspect descriptor usage? This seems to be a very difficult question; I have found contradictory (and many obviously wrong) opinions so far, and Stevens' UNP doesn't address it at all (he seems unaware of the possibility, or else silently reliant on process termination freeing all descriptors). -- Jonathan Graehl http://jonathan.graehl.org/ To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-net" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?000001c0d6d5$87607e80$6dfeac40>