bug-gnulib
[Top][All Lists]
Advanced

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

Re: winsock: needs access to SOCKET in application code


From: Simon Josefsson
Subject: Re: winsock: needs access to SOCKET in application code
Date: Mon, 09 Feb 2009 14:54:58 +0100
User-agent: Gnus/5.110011 (No Gnus v0.11) Emacs/23.0.90 (gnu/linux)

This thread never resulted in a change, but I need one now.  I re-read
the earlier discussions, and some points:

1) It is useful if the gl_fd_to_socket function is available on all
   systems, to avoid ugly #if's in code that uses it.

  Corollary: declaring it in sys/socket.h seems wrong because that file
  should ideally not be needed on well-behaving systems.

2) The gl_socket_to_fd function is complicated due to non-overlapping
   IO.

  Corollary: skip it, it doesn't seem like anyone needs it.  I don't.

3) The function gl_socket_to_fd is a Windows specific work-around and it
   seems unlikely that other non-POSIX systems can use a similar
   interface.  It is not even clear that re-using the same interface for
   non-Windows is a good idea.

A separate module for this might be the simplest, but the 'sockets'
module is there to make sockets work on various platforms.  While Bruno
convinced me otherwise earlier, I think it is the best place for this
kind of functionality.  I have pushed the following.

/Simon

>From c54ca9a9fab462268deec291f450873905acf226 Mon Sep 17 00:00:00 2001
From: Simon Josefsson <address@hidden>
Date: Mon, 9 Feb 2009 14:54:23 +0100
Subject: [PATCH] sockets: Add gl_fd_to_handle.

---
 ChangeLog            |    6 ++++++
 lib/sockets.h        |   15 ++++++++++++++-
 tests/test-sockets.c |    4 +++-
 3 files changed, 23 insertions(+), 2 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index a411173..fd26362 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2009-02-09  Simon Josefsson  <address@hidden>
+
+       * lib/sockets.h (gl_fd_to_handle): New function.
+
+       * tests/test-sockets.c: Call gl_fd_to_handle.
+
 2009-02-09  Bruno Haible  <address@hidden>
 
        * doc/havelib.texi: Document the conventions on bi-arch systems.
diff --git a/lib/sockets.h b/lib/sockets.h
index 33348db..bf180ac 100644
--- a/lib/sockets.h
+++ b/lib/sockets.h
@@ -1,6 +1,6 @@
 /* sockets.h - wrappers for Windows socket functions
 
-   Copyright (C) 2008 Free Software Foundation, Inc.
+   Copyright (C) 2008, 2009 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -29,4 +29,17 @@
 int gl_sockets_startup (int version);
 int gl_sockets_cleanup (void);
 
+/* This function is useful it you create a socket using gnulib's
+   Winsock wrappers but needs to pass on the socket handle to some
+   other library that only accepts sockets. */
+#if WINDOWS_SOCKETS
+static inline SOCKET
+gl_fd_to_handle (int fd)
+{
+  return _get_osfhandle (fd);
+}
+#else
+#define gl_fd_to_handle(x) (x)
+#endif
+
 #endif
diff --git a/tests/test-sockets.c b/tests/test-sockets.c
index 514409d..a37a197 100644
--- a/tests/test-sockets.c
+++ b/tests/test-sockets.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2008 Free Software Foundation
+ * Copyright (C) 2008, 2009 Free Software Foundation
  * Written by Simon Josefsson.
  *
  * This program is free software: you can redistribute it and/or modify
@@ -40,5 +40,7 @@ main (int argc, char *argv[])
       return 1;
     }
 
+  gl_fd_to_handle (0);
+
   return 0;
 }
-- 
1.5.6.5





reply via email to

[Prev in Thread] Current Thread [Next in Thread]