Mercurial > hg > octave-nkf > gnulib-hg
changeset 11764:57245c9661b9
Allow multiple calls to gl_sockets_startup.
author | Bruno Haible <bruno@clisp.org> |
---|---|
date | Sun, 02 Aug 2009 16:39:07 +0200 |
parents | 6b6219b18763 |
children | 4b822ff432cf |
files | ChangeLog lib/sockets.c |
diffstat | 2 files changed, 26 insertions(+), 8 deletions(-) [+] |
line wrap: on
line diff
--- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2009-08-02 Bruno Haible <bruno@clisp.org> + + Allow multiple calls to gl_sockets_startup. + * lib/sockets.c (initialized_sockets_version): New variable. + (gl_sockets_startup): Do nothing if already called for this or a higher + version. + (gl_sockets_cleanup): Reset initialized_sockets_version. + 2009-08-03 Simon Josefsson <simon@josefsson.org> * tests/test-argp-version-etc-1.sh: Use EXEEXT. Don't fail on
--- a/lib/sockets.c +++ b/lib/sockets.c @@ -69,23 +69,31 @@ static struct close_hook close_sockets_hook; +static int initialized_sockets_version /* = 0 */; + #endif int gl_sockets_startup (int version) { #if WINDOWS_SOCKETS - WSADATA data; - int err; + if (version > initialized_sockets_version) + { + WSADATA data; + int err; + + err = WSAStartup (version, &data); + if (err != 0) + return 1; - err = WSAStartup (version, &data); - if (err != 0) - return 1; + if (data.wVersion < version) + return 2; - if (data.wVersion < version) - return 2; + if (initialized_sockets_version == 0) + register_close_hook (close_fd_maybe_socket, &close_sockets_hook); - register_close_hook (close_fd_maybe_socket, &close_sockets_hook); + initialized_sockets_version = version; + } #endif return 0; @@ -97,6 +105,8 @@ #if WINDOWS_SOCKETS int err; + initialized_sockets_version = 0; + unregister_close_hook (&close_sockets_hook); err = WSACleanup ();