projects
/
oweals
/
busybox.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
mkfs.vfat: fix a problem with over-estimating FAT size
[oweals/busybox.git]
/
libbb
/
udp_io.c
diff --git
a/libbb/udp_io.c
b/libbb/udp_io.c
index 2f02a138b4747f6963adc1b6da7d43babfeeae47..b31f28416b6031cd91b372603bd870b14ac8c6a5 100644
(file)
--- a/
libbb/udp_io.c
+++ b/
libbb/udp_io.c
@@
-13,7
+13,7
@@
* This asks kernel to let us know dst addr/port of incoming packets
* We don't check for errors here. Not supported == won't be used
*/
* This asks kernel to let us know dst addr/port of incoming packets
* We don't check for errors here. Not supported == won't be used
*/
-void
+void
FAST_FUNC
socket_want_pktinfo(int fd)
{
#ifdef IP_PKTINFO
socket_want_pktinfo(int fd)
{
#ifdef IP_PKTINFO
@@
-25,10
+25,10
@@
socket_want_pktinfo(int fd)
}
}
-#ifdef UNUSED
-ssize_t
+ssize_t FAST_FUNC
send_to_from(int fd, void *buf, size_t len, int flags,
send_to_from(int fd, void *buf, size_t len, int flags,
- const struct sockaddr *from, const struct sockaddr *to,
+ const struct sockaddr *to,
+ const struct sockaddr *from,
socklen_t tolen)
{
#ifndef IP_PKTINFO
socklen_t tolen)
{
#ifndef IP_PKTINFO
@@
-36,11
+36,12
@@
send_to_from(int fd, void *buf, size_t len, int flags,
#else
struct iovec iov[1];
struct msghdr msg;
#else
struct iovec iov[1];
struct msghdr msg;
- char cbuf[sizeof(struct in_pktinfo)
+ union {
+ char cmsg[CMSG_SPACE(sizeof(struct in_pktinfo))];
#if ENABLE_FEATURE_IPV6 && defined(IPV6_PKTINFO)
#if ENABLE_FEATURE_IPV6 && defined(IPV6_PKTINFO)
- | sizeof(struct in6_pktinfo) /* (a|b) is poor man's max(a,b) */
+ char cmsg6[CMSG_SPACE(sizeof(struct in6_pktinfo))];
#endif
#endif
-
]
;
+
} u
;
struct cmsghdr* cmsgptr;
if (from->sa_family != AF_INET
struct cmsghdr* cmsgptr;
if (from->sa_family != AF_INET
@@
-57,15
+58,15
@@
send_to_from(int fd, void *buf, size_t len, int flags,
iov[0].iov_base = buf;
iov[0].iov_len = len;
iov[0].iov_base = buf;
iov[0].iov_len = len;
- memset(
cbuf, 0, sizeof(cbuf
));
+ memset(
&u, 0, sizeof(u
));
memset(&msg, 0, sizeof(msg));
msg.msg_name = (void *)(struct sockaddr *)to; /* or compiler will annoy us */
msg.msg_namelen = tolen;
msg.msg_iov = iov;
msg.msg_iovlen = 1;
memset(&msg, 0, sizeof(msg));
msg.msg_name = (void *)(struct sockaddr *)to; /* or compiler will annoy us */
msg.msg_namelen = tolen;
msg.msg_iov = iov;
msg.msg_iovlen = 1;
- msg.msg_control =
cbuf
;
- msg.msg_controllen = sizeof(
cbuf
);
+ msg.msg_control =
&u
;
+ msg.msg_controllen = sizeof(
u
);
msg.msg_flags = flags;
cmsgptr = CMSG_FIRSTHDR(&msg);
msg.msg_flags = flags;
cmsgptr = CMSG_FIRSTHDR(&msg);
@@
-89,16
+90,17
@@
send_to_from(int fd, void *buf, size_t len, int flags,
pktptr->ipi6_addr = ((struct sockaddr_in6*)from)->sin6_addr;
}
#endif
pktptr->ipi6_addr = ((struct sockaddr_in6*)from)->sin6_addr;
}
#endif
+ msg.msg_controllen = cmsgptr->cmsg_len;
+
return sendmsg(fd, &msg, flags);
#endif
}
return sendmsg(fd, &msg, flags);
#endif
}
-#endif /* UNUSED */
/* NB: this will never set port# in 'to'!
* _Only_ IP/IPv6 address part of 'to' is _maybe_ modified.
* Typical usage is to preinit 'to' with "default" value
* before calling recv_from_to(). */
/* NB: this will never set port# in 'to'!
* _Only_ IP/IPv6 address part of 'to' is _maybe_ modified.
* Typical usage is to preinit 'to' with "default" value
* before calling recv_from_to(). */
-ssize_t
+ssize_t
FAST_FUNC
recv_from_to(int fd, void *buf, size_t len, int flags,
struct sockaddr *from, struct sockaddr *to,
socklen_t sa_size)
recv_from_to(int fd, void *buf, size_t len, int flags,
struct sockaddr *from, struct sockaddr *to,
socklen_t sa_size)
@@
-110,11
+112,13
@@
recv_from_to(int fd, void *buf, size_t len, int flags,
struct iovec iov[1];
union {
char cmsg[CMSG_SPACE(sizeof(struct in_pktinfo))];
struct iovec iov[1];
union {
char cmsg[CMSG_SPACE(sizeof(struct in_pktinfo))];
+#if ENABLE_FEATURE_IPV6 && defined(IPV6_PKTINFO)
char cmsg6[CMSG_SPACE(sizeof(struct in6_pktinfo))];
char cmsg6[CMSG_SPACE(sizeof(struct in6_pktinfo))];
+#endif
} u;
struct cmsghdr *cmsgptr;
struct msghdr msg;
} u;
struct cmsghdr *cmsgptr;
struct msghdr msg;
- s
ocklen
_t recv_length;
+ s
size
_t recv_length;
iov[0].iov_base = buf;
iov[0].iov_len = len;
iov[0].iov_base = buf;
iov[0].iov_len = len;