posix style DGRAM sockets with cygwin.dll

Mumit Khan khan@xraylith.wisc.EDU
Tue Aug 24 18:27:00 GMT 1999

"Robert A. Mackie" <robert_mackie@mail.com> writes:
> I'm trying to get a very simple UDP example ported to cygwin as a
> starting point for some real code I expect to develop.  Everything
> compiles and links, but the sockets don't communicate.  When built for
> unix the same code works fine.  (unless I've introduced some small bug
> trying to get it to work under cygwin.)  I notice I'm not the first to
> say something like this.  The last person was using the -no-cygwin
> option and was told to call WSAStartup.  I read as much documentation as
> I could find.  It looked to me like that was not necessary when using
> the posix calls, rather than the winsock calls.  (Maybe I'm wrong ?)

If you're using -mno-cygwin, you're using Windows sockets (and you need
WSAStartup); if you're *not* using -mno-cygwin, you're using POSIX sockets
and obviously don't need the windows hacks, er features.

> If I do need to initialize winsock explicitly, could you help me with a
> couple of details? The only place that I see WSAStartup and WSACleanup
> defined is in <Windows32/Sockets.h>.  This file seems to be set up for
> an MSC compiler, and includes a bunch of other similar headers.  When I
> include any of them and the standard headers I'm used to, I get all
> sorts of re-definition collisions between the headers.  When I include
> them without the standard headers, things like strerror aren't defined.

You include winsock.h, not the internal headers, but *only* if you're using
Windows sockets. If you're using Cygwin runtime, use the POSIX specs and
forget about the windows headers (Cygwin runtime will do the right thing).

It's quite unclear from your message what runtime you're trying to use
and so on. If you could elaborate, we could try to help. 

As far as your code is concerned, there is at least one blatant bug I
see right away -- 

  server_address.sin_port        = htonl(SERVER_UDP_PORT);
                                   ^^^^^ (should be htons)

likewise in the other case. Just remember that sin_addr is htonl and
sin_port is htons and life would be a lot easier.

Perhaps you ought to check over your code a bit more and try again.


Want to unsubscribe from this list?
Send a message to cygwin-unsubscribe@sourceware.cygnus.com

More information about the Cygwin mailing list