PDA

View Full Version : Unreal server and Vista


Lar
11th June, 2008, 06:10 PM
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 forwarding (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:

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 occurred 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:
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:
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 spiel is to find out if anyone else has had this problem running an Unreal server on Vista and if a solution was found. I appreciate any help that is given.

-Later!

holytotemic
15th September, 2008, 12:03 PM
Has anyone tried running windows 2000 or xp in a virtual box and running the server from within the virtual box when having this issue with vista. im going to try it but i figured i'd ask.

holytotemic
15th September, 2008, 09:45 PM
Ok i only run lan games so i dont know how this will work for you. proly if you leave out hamachi it will work just fine for hosting games on the net. here we go: first get hamachi and install. then get a virtual machine program like virtualbox. install windows 2000 and hamachi on the virtual box. copy your unreal folder to the virtual machine through the use of shared folders. start a server on the virtual box while hamachi is running. now on your box and any other computer that wants to connect (they need hamachi connected to the main hamachi server too) open unreal and open location and type the ip addy listed on the hamachi server on the virtual machine..voila a hosted lan server on a vista 32 or 64 system. (your main machine should be running hamachi as a server and the virtual box should be connected to the main hamachi server)


-hey not too pretty but very functional.