Date: Thu, 29 Mar 2001 14:08:40 -0600 From: "Jim King" <jim@jimking.net> To: "Nate Williams" <nate@yogotech.com> Cc: "Paul Marquis" <pmarquis@pobox.com>, "Nate Williams" <nate@yogotech.com>, "Brian Matthews" <blm@actzero.com>, "Allen Landsidel" <all@biosys.net>, <freebsd-stable@FreeBSD.ORG> Subject: Re: Threads vs. blocking sockets Message-ID: <011001c0b88c$1009bde0$524c8486@jking> References: <F0D64494733BD411BB9A00D0B74A0264021C9E@cpe-24-221-167-196.ca.sprintbbd.net><15043.35980.669828.971544@nomad.yogotech.com><00dd01c0b886$d8510250$524c8486@jking><3AC390FD.6C03BF8F@pobox.com><00f201c0b889$c4ff4d30$524c8486@jking> <15043.37950.941991.251263@nomad.yogotech.com>
next in thread | previous in thread | raw e-mail | index | archive | help
OK, that makes sense to me - thanks for the clue. :-) Jim "Nate Williams" <nate@yogotech.com> wrote: > > None of the documented values for errno as set by send(2) indicate "only > > part of the data was sent", at least by my reading. > > That's because it's not an error to send part of the data. > > > How do I tell how many bytes were sent? > > The call returns the number of characters (bytes) sent. You do know how > much data you were sending, don't you? > > Here's a clue for you, since you apparently aren't getting one > otherwise. This code probably won't even compile due to const > poisoning, but hopefully you'll get the idea. > > boolean > mySocketSend(int s, const void *msg, size_t len, int flags) > { > size_t totalSent; > void *data; > > totalSent = 0; > data = msg; > do > { > size_t sent; > sent = send(s, data, len - sentBytes, flags); > if (sent < 0) > { > /* XXX - Handle the error here */ > return false; > } > else if (sent > 0) > { > totalSent += sent; > data += sent; > } > } while (totalSent < len); > > /* Success, sent all the bytes */ > return true; > } > > > > > > Still sounds broken to me. > > > > Jim > > > > "Paul Marquis" <pmarquis@pobox.com> wrote: > > > > > Under the manual entry for send(2), the RETURN VALUES section states: > > > > > > The call returns the number of characters sent, or -1 if an > > > error occured. > > > > > > So if you request to send 100 bytes, the OS may only be able to sent > > > half those and you need to check how many you sent an resend the part > > > that wasn't sent. > > > > > > Nate is right. > > > > > > Jim King wrote: > > > > Nate Williams wrote: > > > > > Again, all threading libraries I've used (not just on FreeBSD) > > *require* > > > > > the user to check that when sending/receiving data, the caller must > > make > > > > > sure that all the expected data has been sent/received. > > > > > > > > The man page for send(2) doesn't mention this. It sounds broken to me. > > > > > To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-stable" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?011001c0b88c$1009bde0$524c8486>