From 7d71f6aed094027aed1a43cdd7e91674892f7e89 Mon Sep 17 00:00:00 2001 From: "Charles.Forsyth" Date: Mon, 4 Feb 2008 15:00:38 +0000 Subject: 20080204-1507 --- emu/port/devip.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) (limited to 'emu/port/devip.c') diff --git a/emu/port/devip.c b/emu/port/devip.c index 2e1a9b1a..e70d7dc3 100644 --- a/emu/port/devip.c +++ b/emu/port/devip.c @@ -614,7 +614,7 @@ setladdr(Conv *c) { ulong laddr; - /* TO DO: this can't be right for hosts with several addresses */ + /* TO DO: this can't be right for hosts with several addresses before connect/accept */ so_getsockname(c->sfd, &laddr, &c->lport); ipw6(c->laddr, laddr); } @@ -626,10 +626,16 @@ static void setlport(Conv *c) { ulong laddr; - - so_bind(c->sfd, c->restricted, c->lport); - if(c->lport == 0) - so_getsockname(c->sfd, &laddr, &c->lport); + ushort p; + + so_bind(c->sfd, c->restricted, ip6w(c->laddr), c->lport); + if(c->lport == 0 || ipcmp(c->laddr, IPnoaddr) == 0){ + so_getsockname(c->sfd, &laddr, &p); + if(c->lport == 0) + c->lport = p; + if(ipcmp(c->laddr, IPnoaddr) == 0) + ipw6(c->laddr, laddr); + } } static int -- cgit v1.2.3