--- tftp_io.c.orig	2004-02-19 09:30:00.000000000 +0800
+++ tftp_io.c	2010-10-11 13:01:28.000000000 +0800
@@ -103,7 +103,8 @@
      tftphdr.th_block = htons(block_number);
 
      result = sendto(socket, &tftphdr, 4, 0, (struct sockaddr *)sa,
-                     sizeof(*sa));
+		     sizeof(*sa));
+
      if (result < 0)
           return ERR;
      return OK;
@@ -142,7 +143,8 @@
      }
      /* send the buffer */
      result = sendto(socket, buffer, index, 0, (struct sockaddr *)sa,
-                     sizeof(*sa));
+		     sizeof(*sa));
+
      if (result < 0)
           return ERR;
      return OK;
@@ -171,6 +173,7 @@
 
      result = sendto(socket, tftphdr, size, 0, (struct sockaddr *)sa,
                      sizeof(*sa));
+
      if (result < 0)
           return ERR;
      return OK;
@@ -192,7 +195,8 @@
      tftphdr->th_block = htons(block_number);
 
      result = sendto(socket, data, size, 0, (struct sockaddr *)sa,
-                     sizeof(*sa));
+		     sizeof(*sa));
+
      if (result < 0)
           return ERR;
      return OK;
@@ -214,7 +218,6 @@
 
      struct msghdr msg;         /* used to get client's packet info */
      struct cmsghdr *cmsg;
-     struct in_pktinfo *pktinfo;
      struct iovec iov;
      char cbuf[1024];
 
@@ -284,11 +287,12 @@
                     cmsg != NULL && cmsg->cmsg_len >= sizeof(*cmsg);
                     cmsg = CMSG_NXTHDR(&msg, cmsg))
                {
-                    if (cmsg->cmsg_level == SOL_IP
-                        && cmsg->cmsg_type == IP_PKTINFO)
+                    if (cmsg->cmsg_level == IPPROTO_IP
+		        && cmsg->cmsg_type == IP_RECVDSTADDR)
                     {
-                         pktinfo = (struct in_pktinfo *)CMSG_DATA(cmsg);
-                         sa_to->sin_addr = pktinfo->ipi_addr;
+			 struct in_addr *pktinfo;
+			 pktinfo = (struct in_addr *)CMSG_DATA(cmsg);
+			 sa_to->sin_addr = *pktinfo;
                     }
                     break;
                }