summaryrefslogtreecommitdiff
path: root/src/server
diff options
context:
space:
mode:
Diffstat (limited to 'src/server')
-rw-r--r--src/server/publicServer.c50
1 files changed, 45 insertions, 5 deletions
diff --git a/src/server/publicServer.c b/src/server/publicServer.c
index b2d86f9..2f94063 100644
--- a/src/server/publicServer.c
+++ b/src/server/publicServer.c
@@ -7,9 +7,15 @@
#include <time.h>
#ifdef SUPPORT_NET_UNIX_UDP
+#ifndef __WIN32
#include <sys/socket.h>
#include <sys/select.h>
#include <arpa/inet.h>
+#else
+# include <windows.h>
+# include <wininet.h>
+#endif
+
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
@@ -55,7 +61,11 @@ static char *getSetting(char *env, char *param, char *default_val)
static int registerPublicServer()
{
+#ifndef __WIN32
int s;
+#else
+ SOCKET s;
+#endif
/* TODO: dodelat TCP makro */
#ifdef SUPPORT_NET_UNIX_UDP
@@ -78,18 +88,39 @@ static int registerPublicServer()
free(master_server_ip);
if ((s = socket (AF_INET, SOCK_STREAM, 0)) < 0) {
- close (s);
return 0;
}
- int oldFlag = fcntl (s, F_GETFL, 0);
- if (fcntl (s, F_SETFL, oldFlag | O_NONBLOCK) == -1) {
+ /* Set to nonblocking socket mode */
+#ifndef __WIN32__
+ int oldFlag;
+
+ oldFlag = fcntl (s, F_GETFL, 0);
+
+ if( fcntl(s, F_SETFL, oldFlag | O_NONBLOCK) == -1 )
+ {
return -1;
}
+#else
+ unsigned long arg = 1;
+ // Operation is FIONBIO. Parameter is pointer on non-zero number.
+ if( ioctlsocket(s, FIONBIO, &arg) == SOCKET_ERROR )
+ {
+ WSACleanup();
+ return -1;
+ }
+#endif
- if (connect (s, (struct sockaddr *) &server, sizeof (server)) == -1) {
+ if( connect (s, (struct sockaddr *) &server, sizeof (server)) == -1 ) {
+#ifndef __WIN32__
if (errno != EINPROGRESS)
return -1;
+#else
+ if (WSAGetLastError() != WSAEWOULDBLOCK) {
+ WSACleanup();
+ return -1;
+ }
+#endif
}
struct timeval tv;
@@ -145,11 +176,20 @@ static int registerPublicServer()
free (str);
if (r == -1) {
+#ifndef __WIN32
close(s);
+#else
+ closesocket(s);
+#endif
return -1;
}
- close(s);
+#ifndef __WIN32
+ close(s);
+#else
+ closesocket(s);
+#endif
+
#else
return -1;
#endif