Page 1 of 1

Unreal server and Vista

Posted: Wed Jun 11, 2008 7:30 am
by fixer-lxxi
Greetings!!

A friend and I decided to play some Unreal via LAN the other day, but we came across an unusual problem. As the title states, we were trying to run a server on Vista. The game itself runs fine, it's just that when we created a server, we weren't able to see it from any other client on the LAN. I'm quite familiar with port forwading (not needed on LAN) and opening ports on firewalls. All of that checked out, but we still weren't able to see the server on the LAN. I did some investigating and found this in the log file:

Code: Select all

Log: UdpServerQuery DmAriza.UdpServerQuery0 (Function IpServer.UdpServerQuery.PreBeginPlay:002E) BindPort: bind failed
UdpServerQuery: Port failed to bind.
The game port, 7777, bound just fine, but UdpServerQuery port, 7778, did not. Also, ServerBeaconPort, 7775, bound as well. I dug a little deeper and discovered that the native "BindPort()" function wasn't incrementing the port number like it should. When UdpServerQuery requests a port to bind to, it always tries 7777 first (Level.Game.GetServerPort()), but it will fail. the BindPort() function is suppose to increment the port number and try again before returning the result to UdpServerQuery.

I loaded up other games based on UE1 tech (UT99, Rune, and WoT), and the same bug occured with all of them. I also loaded UT2004, but it worked without problems. I did some more digging to find out why UT2004 worked, but the others didn't.

The function responsible for requesting the query port looks like this in Unreal:

Code: Select all

class UdpServerQuery extends UdpLink config;
...
...
// Initialize.
function PreBeginPlay()
{
    // Set the Tag
    Tag = QueryName;

    // Bind the listen socket
    if( !BindPort(Level.Game.GetServerPort(), true) )
    {
        Log("UdpServerQuery: Port failed to bind.");
        return;
    }
}


In UT2004, the function looks like this:

Code: Select all

class UdpGameSpyQuery extends UdpLink config;
...
...
function PreBeginPlay()
{
    local int boundport, requestport;

    // Set the Tag
    Tag = QueryName;

    // Bind the listen socket
    requestport = Level.Game.GetServerPort()+10;
    boundport = BindPort(requestport, true);
    if( boundport == 0 )
    {
        Log("UdpServerQuery: Port failed to bind.");
        return;
    }
    Log("UdpServerQuery(crt): Port "$boundport$" successfully bound.");
...
...
}

Notice how 10 is added to Level.Game.GetServerPort() before it's passed to the BindPort() call. I did a little experiment and created a modified version of UdpServerQuery that added 1 to Level.Game.GetServerPort() in the BindPort() call. I ran the server, and lo and behold it worked!! That told me that BindPort() wasn't incrementing like it should.

The gist of my whole speil is to find out if anyone else has had this problem running a server on Vista and if a solution was found. I appreciate any help that is given.

-Later!

Re: Unreal server and Vista

Posted: Wed Jun 11, 2008 10:03 am
by GreatEmerald
Hmm, when trying to set up LAN games I really had problems of the server not showing up in the list. Simply use the "open" URL tool to open the IP and it will work, although unlisted. This is WinXP here though.

Re: Unreal server and Vista

Posted: Sat Jun 27, 2009 5:04 pm
by fixer-lxxi
Wow, one year later! LOL!

Anyway, I discovered that Vista SP2 fixes this problem.  It also fixes other BindPort() problems such as client server browser timing out when pinging servers.

SP2 has been discussed here.

-Later!

Re: Unreal server and Vista

Posted: Sat Jun 27, 2009 5:42 pm
by SkaarjSlayer
Wow, one year later! LOL!

And the only two posts you've made were these ones? :P

Re: Unreal server and Vista

Posted: Sat Jun 27, 2009 5:42 pm
by []KAOS[]Casey
well thanks for closing the issue finally, we can tell people what the issue is when they ask.