RE: [INTERFACES] Win32 interface - Mailing list pgsql-interfaces

From Magnus Hagander
Subject RE: [INTERFACES] Win32 interface
Date
Msg-id 215896B6B5E1CF11BC5600805FFEA82101F71092@sirius.edu.sollentuna.se
Whole thread Raw
Responses RE: [INTERFACES] Win32 interface  ("Hiroshi Inoue" <Inoue@tpf.co.jp>)
List pgsql-interfaces
> >> ISTM there was some reason it wouldn't work, like maybe you can
> >> only call WSAStartup once per program, but I don't recall for sure.
> 
> > We can call WSAStartup() more than once. However,there must be a
> > call to WSACleanup() for every successful call to WSAStartup()
> > made by a task. Only the final WSACleanup() for that task does the
> > actual cleanup.
> >
> > The simplest way may be to call WSAStartup() while connecting and 
> > to call WSACleanup() while finishing(including error cases).
> 
> That would be an easy change.  Are these functions fast enough that
> calling them for every connect/disconnect cycle would be tolerable?

I beleive so. But we could probably get away from that using static
variables, no? Somewhere just put:

static int has_wsastartup = 0;

...

if (!has_wsastartup) {  has_wsastartup = 1;  WSAStartup()...
}


That way, it would only be run once, right? 
Naturally, everything within #ifdef WIN32.


One could also check the result code from the first winsock call. If that
one is 'Winsock not initialized', then initialize it and try again. This
would get us around the case of the client application calling WSAStartup()
on its own. But that is probably not necessary - that applcation will call
WSACleanup itself, and an app is allowed to call WSAStartup() more than
once.

Mvh,Magnus


pgsql-interfaces by date:

Previous
From: Tom Lane
Date:
Subject: Re: [INTERFACES] Win32 interface
Next
From: Mark Dzmura
Date:
Subject: JDBC Documentation??