windows: Provide a close(2) that can close both file handles and sockets
authorMartin Willi <martin@revosec.ch>
Thu, 21 Nov 2013 15:27:21 +0000 (16:27 +0100)
committerMartin Willi <martin@revosec.ch>
Wed, 4 Jun 2014 13:53:04 +0000 (15:53 +0200)
src/libstrongswan/utils/windows.c
src/libstrongswan/utils/windows.h

index 48a70b6..492821d 100644 (file)
@@ -334,6 +334,22 @@ static bool check_dontwait(int *flags)
 /**
  * See header
  */
+#undef close
+int windows_close(int fd)
+{
+       int ret;
+
+       ret = close(fd);
+       if (ret == -1 && errno == EBADF)
+       {       /* Winsock socket? */
+               ret = wserr(closesocket(fd));
+       }
+       return ret;
+}
+
+/**
+ * See header
+ */
 #undef recv
 ssize_t windows_recv(int sockfd, void *buf, size_t len, int flags)
 {
index d57b5dc..3e317ce 100644 (file)
@@ -265,6 +265,12 @@ int socketpair(int domain, int type, int protocol, int sv[2]);
 #define ECONNRESET ENXIO
 
 /**
+ * close(2) working for file handles and Winsock sockets
+ */
+#define close windows_close
+int windows_close(int fd);
+
+/**
  * recv(2) with support for MSG_DONTWAIT
  */
 #define recv windows_recv