[gnet] gnet 2.0.5 on windows with mingw/msys



Hi there folks!
I'm trying to use gnet as part of a cross platform networking project,
and every thing
seems to work fine on my alternative OS's (linux, os x, etc.), but I
seem to be running
into a problem related to Stephane Rouleau's who posted earlier (In
the Feb. Archive for '04.
I couldn't find a reply, and his post was more of a statement than a
question, but anyway).

I've gotten both glib and gnet compiled from scratch and installed
using Mingw/MSYS,
however the example programs do not run.  In particular, I've traced
echoserver's failure
to the error code (from WSAGetLastError()) 10093.  Now, the msdn site says:

"Either the application has not called  WSAStartup or  WSAStartup
failed. The application
may be accessing a socket that the current active task does not own
(that is, trying to share
a socket between tasks), or  WSACleanup has been called too many times."

and after a quick perusal of recent gnet mailing list activity, I
found Stephane's post.  I figured
that for some reason WSAStartup just wasn't being called, and dropped
in a snippet of code
from gnet-private.c to the top of echoserver.c, which promptly broke
the example and led me to
believe that WSAStartup *was* being called, and one of the other
conditions was causing the failure.

To begin with, I had thought that either the windows TCP/IP stack was
messed up, or there was
a hardware problem, and thats why I tried getting the error codes from
WSAGetLastError.  Then,
I began to suspect that it was a networking misconfiguration (the
subnet that the machine I'm testing
this on is cut off from everything else on our larger network by a
firewall that only lets ssh out, and
dns both ways (requests out, replies back in)), but our Sysadmin came
by and double checked everything,
and we ran a few other networking apps that had no problems running
(all windows native though).
After looking into this, and trying alternatives to gnet (Qt, with
QSocket and QSocketDevice) I'm
pretty sure this is an issue specific to gnet under MinGW/MSYS.  (The
Qt examples compiled and ran sucsessfully.)
If anybody could point out if I'm doing something obviously wrong, or
if they've had similar problems, I would greatly
appreciate it.
Thanks!
-Brian Hrolenok

Output BEFORE I changed anything:

$./echoserver 1234
(process 2856): GNet-WARNING **:can't set reuse on tcp socket
Could not create server on port 1234

end output.

Output AFTER I added printf("%d \n",WSAGetLastError()) after
gnet_tcp_socket_server_new_with_port returned null:

$./echoserver 1234
(process 3152):GNet-WARNING **:can't set reuse on tcp socket
10093
Could not create server on port 1234

end output.

Code listing which broke echoserver.c when I dropped it in follows:

/* My changes.  Before anything else in main(). */
/* <Windows.h> gets included up at the top.*/
WORD foo;
WSAData bar;
int baz;
foo = MAKEWORD(2,0);
baz = WSAStartup(foo,&bar);
printf("Version: %d.%d \n Error(baz): %d \n Error(WSAGetLastError): %d
\n",LOBYTE(bar.wVersion),HIBYTE(bar.wVersion),baz,WSAGetLastError());
/* End of my changes.  Rest of main() follows */

End code listing.

Output:

$./echoserver.exe 1234
(process 4044): Gnet-WARNING **:  can't set reuse on tcp socket
Version 2.0
Error(baz): 0
Error(WSAGetLastError): 10038
Could not create server on port 1234

End output.

10038 is WSAENOTSOCK, which says something about performing socket operations on
something that's not a socket.  I figured that since the WSAStartup
was returning stuff that
shouldn't make the gnet-private.c function fail, that the 10038 error
was happening because
WSAStartup was being called twice, or because I had put it in a funky
place or something
like that.  Let me know if you want any other output!



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]