Revision f3ae0704
b/slirp/udp.c | ||
---|---|---|
318 | 318 |
struct sockaddr_in saddr, daddr; |
319 | 319 |
|
320 | 320 |
saddr = *addr; |
321 |
if ((so->so_faddr.s_addr & htonl(0xffffff00)) == special_addr.s_addr && |
|
322 |
addr->sin_addr.s_addr == htonl(0x7f000001)) { |
|
323 |
saddr.sin_addr.s_addr = so->so_faddr.s_addr; |
|
321 |
if ((so->so_faddr.s_addr & htonl(0xffffff00)) == special_addr.s_addr) { |
|
324 | 322 |
if ((so->so_faddr.s_addr & htonl(0x000000ff)) == htonl(0xff)) |
325 | 323 |
saddr.sin_addr.s_addr = alias_addr.s_addr; |
324 |
else if (addr->sin_addr.s_addr == loopback_addr.s_addr || |
|
325 |
((so->so_faddr.s_addr & htonl(CTL_DNS)) == htonl(CTL_DNS))) |
|
326 |
saddr.sin_addr.s_addr = so->so_faddr.s_addr; |
|
326 | 327 |
} |
327 | 328 |
daddr.sin_addr = so->so_laddr; |
328 | 329 |
daddr.sin_port = so->so_lport; |
Also available in: Unified diff