opnsense-ports/net/sock/files/patch-src__sourceudp.c
Franco Fichtner 92f7f399cd */*: sync with upstream
Taken from: FreeBSD
2016-05-25 07:17:49 +02:00

62 lines
2.1 KiB
C

--- src/sourceudp.c.orig 2010-05-28 00:03:25 UTC
+++ src/sourceudp.c
@@ -29,28 +29,41 @@ source_udp(int sockfd) /* TODO: use send
if (connectudp) {
if ( (n = write(sockfd, wbuf, writelen)) != writelen) {
if (ignorewerr) {
- err_ret("write returned %d, expected %d", n, writelen);
- /* also call getsockopt() to clear so_error */
+ err_ret("write returned %d, expected %d",
+ n, writelen);
+ /* also call getsockopt() to clear so_error */
optlen = sizeof(option);
- if (getsockopt(sockfd, SOL_SOCKET, SO_ERROR,
- &option, &optlen) < 0)
- err_sys("SO_ERROR getsockopt error");
- } else
- err_sys("write returned %d, expected %d", n, writelen);
+ if (getsockopt(sockfd, SOL_SOCKET,
+ SO_ERROR, &option, &optlen) < 0)
+ err_sys("SO_ERROR getsockopt error");
+ } else {
+ err_sys("write returned %d, expected %d",
+ n, writelen);
+ }
}
} else {
- if ( (n = sendto(sockfd, wbuf, writelen, 0,
- (struct sockaddr *) &servaddr,
- sizeof(struct sockaddr))) != writelen) {
- if (ignorewerr) {
- err_ret("sendto returned %d, expected %d", n, writelen);
- /* also call getsockopt() to clear so_error */
+ if (af_46 == AF_INET) {
+ n = sendto(sockfd, wbuf, writelen, 0,
+ (struct sockaddr *) &servaddr4,
+ sizeof(servaddr4));
+ } else {
+ n = sendto(sockfd, wbuf, writelen, 0,
+ (struct sockaddr *) &servaddr6,
+ sizeof(servaddr6));
+ }
+ if (n != writelen) {
+ if (ignorewerr) {
+ err_ret("sendto returned %d, expected %d",
+ n, writelen);
+ /* also call getsockopt() to clear so_error */
optlen = sizeof(option);
- if (getsockopt(sockfd, SOL_SOCKET, SO_ERROR,
- &option, &optlen) < 0)
- err_sys("SO_ERROR getsockopt error");
- } else
- err_sys("sendto returned %d, expected %d", n, writelen);
+ if (getsockopt(sockfd, SOL_SOCKET,
+ SO_ERROR, &option, &optlen) < 0)
+ err_sys("SO_ERROR getsockopt error");
+ } else {
+ err_sys("sendto returned %d, expected %d",
+ n, writelen);
+ }
}
}