This is the mail archive of the mailing list for the Cygwin project.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: cvs broken on win2k after recent cygwin upgrade: "The descriptor is a file, not a socket"

On Sun, Apr 15, 2001 at 03:36:31PM -0400, Christopher Faylor wrote:
> On Sun, Apr 15, 2001 at 06:44:50PM +0200, Corinna Vinschen wrote:
> >On Sun, Apr 15, 2001 at 09:07:28AM -0400, Christopher Faylor wrote:
> >> On Sun, Apr 15, 2001 at 09:22:58AM +0100, Henry S. Thompson wrote:
> >> >Thanks for the observations.  Seems to me to confirm Corinna's
> >> >original belief that somehow Cygwin is getting the wrong WINSOCK
> >> >library, even though the right one is available.
> >> 
> >> Cygwin uses wsock32.dll.
> >
> >That's not quite correct. Cygwin uses ws2_32.dll if available.
> >The reason is the Winsock2 functionality used for duplicating
> >sockets. The old method is still implemented as a fallback, though.
> How is that implemented?  I don't see it in the code.  Where is
> that implemented below?

It's not that obvious. Since WsaStartup is called with a requested
version of 2.2 in wsa_init(), the wsock32 code asks if winsock 2 is
available on the system. If so, it will be used. The reason for
loading ws2_32 explicitly in Cygwin is that the function pointers of
the special winsock 2 functions couldn't be resolved otherwise.

> Also the two tests for ws32_handle and wsock32_handle look reversed.
> cgf
> LoadDLLinitfunc (wsock32)
> {
>   extern void wsock_init ();
>   HANDLE h;
>   if ((h = LoadLibrary ("wsock32.dll")) != NULL)
>     wsock32_handle = h;
>   else if (!wsock32_handle)
>     api_fatal ("could not load wsock32.dll.  Is TCP/IP installed?");
>   else
>     return 0;           /* Already done by another thread? */
>   if (!ws2_32_handle) 	/* IS THIS CORRECT? */
>     wsock_init ();

It is. WsaStartup should only be called once regardless whether the
first winsock function is a version 1.1 or version 2 function. The
wsa_init function is only called if it's not already called from the
other entry point.


Corinna Vinschen                  Please, send mails regarding Cygwin to
Cygwin Developer                      
Red Hat, Inc.

Want to unsubscribe from this list?
Check out:

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]