Il 04/10/2010 11:34, Giovanni Mascellani ha scritto: > The problem seems to stay in tftp_io.c, function tftp_send_data: the > sendto call fails with errno = 56 (EISCONN). Don't know why under > kFreeBSD the socket appears to be already connected, I'll investigate > more in the next days.
FreeBSD doesn't like that an address is specified to sendto() data on a connected socket, while Linux allows it. Thus, we have to disable the call to connect() on FreeBSD. I'm attaching a patch for it, I intend to NMU it on DELAYED/03. Thanks, Gio. -- Giovanni Mascellani <[email protected]> Pisa, Italy Web: http://poisson.phc.unipi.it/~mascellani Jabber: [email protected] / [email protected]
diff -u atftp-0.7.dfsg/tftpd.c atftp-0.7.dfsg/tftpd.c
--- atftp-0.7.dfsg/tftpd.c
+++ atftp-0.7.dfsg/tftpd.c
@@ -673,6 +673,9 @@
retval = ABORT;
}
/* connect the socket, faster for kernel operation */
+ /* this is not a good idea on FreeBSD, because sendto() cannot
+ be used on a connected datagram socket */
+#if !defined(__FreeBSD_kernel__)
if (connect(data->sockfd,
(struct sockaddr *)&data->client_info->client,
sizeof(data->client_info->client)) == -1)
@@ -680,6 +683,7 @@
logger(LOG_ERR, "connect: %s", strerror(errno));
retval = ABORT;
}
+#endif
logger(LOG_DEBUG, "Creating new socket: %s:%d",
sockaddr_print_addr(&to, addr_str, sizeof(addr_str)),
sockaddr_get_port(&to));
diff -u atftp-0.7.dfsg/debian/changelog atftp-0.7.dfsg/debian/changelog
--- atftp-0.7.dfsg/debian/changelog
+++ atftp-0.7.dfsg/debian/changelog
@@ -1,3 +1,11 @@
+atftp (0.7.dfsg-9.2) unstable; urgency=low
+
+ * Non-maintainer upload.
+ * Fixed use of sendto() over a connected datagram socket on FreeBSD
+ (closes: #598474).
+
+ -- Giovanni Mascellani <[email protected]> Mon, 04 Oct 2010 16:46:32 +0200
+
atftp (0.7.dfsg-9.1) unstable; urgency=low
* Non-maintainer upload.
signature.asc
Description: OpenPGP digital signature

