Date: Fri, 02 Nov 2007 11:45:53 +0200 From: Ian FREISLICH <ianf@clue.co.za> To: current@freebsd.org Subject: sendfile() not detecting closed connections. Message-ID: <E1Int69-0000bA-NO@clue.co.za>
next in thread | raw e-mail | index | archive | help
Hi
System is 8.0-CURRENT. I have the following piece of code:
rename(path, data);
stat(data, &sb);
len = snprintf(buffer, MAXBUFLEN, "BYTES %lld\r\n", sb.st_size);
write(connection, buffer, len);
sleep(10);
if ((sendfile(fd, connection, 0, sb.st_size, NULL,
&sbytes, 0)) == -1 || sbytes != sb.st_size) {
syslog(facility, "Problem writing data: %s, wrote %lld",
strerror(errno), sbytes);
respool(fd, path);
unlink(data)
close(fd);
return(-1);
}
else
syslog(facility, "Download successful %ld", sbytes);
close(fd);
unlink(data);
If, during the sleep, I terminate the connection so that netstat
reports:
tcp4 0 0 127.0.0.1.666 127.0.0.1.58239 CLOSE_WAIT
tcp4 0 0 127.0.0.1.58239 127.0.0.1.666 FIN_WAIT_2
sendfile() reports success for files less than about 64k in size,
but I haven't been able to figure out where the threshold is. It
erroneously reports that 41000 of the 64k were sent, but will say
the whole file was transferred up to about 64k. The connection
filedescriptor is blocking.
Any ideas?
Ian
--
Ian Freislich
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?E1Int69-0000bA-NO>
