diff --git a/Fltk/GmshServer.h b/Fltk/GmshServer.h index f72c0be05f174f50885056ea95a41a83062502a0..8fd292ff8830d3df676928e3de0a5d9584509466 100644 --- a/Fltk/GmshServer.h +++ b/Fltk/GmshServer.h @@ -39,14 +39,24 @@ int WaitForData(int socket, int num, int pollint, double waitint); #if defined(_AIX) #include <strings.h> #endif + +#if !defined(WIN32) || defined(__CYGWIN__) + #include <sys/types.h> #include <sys/socket.h> #include <sys/stat.h> +#include <sys/poll.h> #include <sys/un.h> #include <sys/time.h> #include <unistd.h> #include <netinet/in.h> +#else // pure windows + +#include <winsock2.h> + +#endif + class GmshServer { public: // This should match what's in GmshClient.h @@ -74,7 +84,7 @@ class GmshServer { int sofar = 0; int remaining = bytes; do { - int len = read(_sock, buf + sofar, remaining); + ssize_t len = recv(_sock, buf + sofar, remaining, 0); if(len <= 0) return 0; sofar += len; @@ -132,7 +142,9 @@ class GmshServer { if(_portno < 0){ // delete the file if it already exists +#if !defined(WIN32) || defined(__CYGWIN__) unlink(_sockname); +#endif // make the socket s = socket(PF_UNIX, SOCK_STREAM, 0); @@ -218,8 +230,10 @@ class GmshServer { { if(_portno < 0){ // UNIX socket +#if !defined(WIN32) || defined(__CYGWIN__) if(unlink(_sockname) == -1) return -1; // Impossible to unlink the socket +#endif } close(_sock); return 0; diff --git a/Fltk/Solvers.cpp b/Fltk/Solvers.cpp index d090bea271b4dcc739f55cadbb39f2592e7fc382..fd3816bf0bc00c61925fec2f2671c4f2ba534d6d 100644 --- a/Fltk/Solvers.cpp +++ b/Fltk/Solvers.cpp @@ -1,4 +1,4 @@ -// $Id: Solvers.cpp,v 1.39 2005-08-31 21:44:44 geuzaine Exp $ +// $Id: Solvers.cpp,v 1.40 2005-09-25 18:51:27 geuzaine Exp $ // // Copyright (C) 1997-2005 C. Geuzaine, J.-F. Remacle // @@ -24,8 +24,6 @@ SolverInfo SINFO[MAXSOLVERS]; -#if !defined(WIN32) || defined(__CYGWIN__) - #include "GmshServer.h" // FIXME: this should be removed (and we should set the socket options @@ -33,13 +31,6 @@ SolverInfo SINFO[MAXSOLVERS]; int GmshServer::init = 0; int GmshServer::s; -#include <sys/types.h> -#include <sys/socket.h> -#include <sys/stat.h> -#include <sys/poll.h> -#include <sys/un.h> -#include <unistd.h> - #include "OpenFile.h" #include "GmshUI.h" #include "GUI.h" @@ -281,13 +272,3 @@ int Solver(int num, char *args) return 1; } - -#else // pure windows - -int Solver(int num, char *args) -{ - Msg(GERROR, "Solver interface not available on Windows without Cygwin"); - return 1; -} - -#endif diff --git a/utils/solvers/c++/GmshClient.h b/utils/solvers/c++/GmshClient.h index 8b310752e122cb440bf668863635bb71418602c2..c07f1adb57089db6e9399fdc68b419effad2aca2 100644 --- a/utils/solvers/c++/GmshClient.h +++ b/utils/solvers/c++/GmshClient.h @@ -33,6 +33,9 @@ #ifdef _AIX #include <strings.h> #endif + +#if !defined(WIN32) || defined(__CYGWIN__) + #include <sys/types.h> #include <sys/socket.h> #include <sys/stat.h> @@ -42,6 +45,12 @@ #include <netinet/in.h> #include <netdb.h> +#else // pure windows + +#include <winsock2.h> + +#endif + class GmshClient { private: typedef enum{ CLIENT_START = 1, @@ -63,7 +72,7 @@ class GmshClient { int sofar = 0; int remaining = bytes; do { - int len = write(_sock, buf + sofar, remaining); + ssize_t len = send(_sock, buf + sofar, remaining, 0); sofar += len; remaining -= len; } while(remaining > 0); @@ -77,17 +86,23 @@ class GmshClient { } long _GetTime() { +#if !defined(WIN32) || defined(__CYGWIN__) struct timeval tp; gettimeofday(&tp, (struct timezone *)0); return (long)tp.tv_sec * 1000000 + (long)tp.tv_usec; +#else + return 0; +#endif } void _Idle(double delay) { +#if !defined(WIN32) || defined(__CYGWIN__) long t1 = _GetTime(); while(1) { if(_GetTime() - t1 > 1.e6 * delay) break; } +#endif } public: GmshClient() : _sock(0) {} diff --git a/utils/solvers/c/GmshClient.c b/utils/solvers/c/GmshClient.c index b97985fdfd6a01c93daa1ce75bae228c4b776c71..c37b6c497fe5cadafcfa62414f3a222ab67763e8 100644 --- a/utils/solvers/c/GmshClient.c +++ b/utils/solvers/c/GmshClient.c @@ -1,4 +1,4 @@ -/* $Id: GmshClient.c,v 1.3 2005-01-16 20:56:03 geuzaine Exp $ */ +/* $Id: GmshClient.c,v 1.4 2005-09-25 18:51:27 geuzaine Exp $ */ /* * Copyright (C) 1997-2005 C. Geuzaine, J.-F. Remacle * @@ -36,6 +36,9 @@ #ifdef _AIX #include <strings.h> #endif + +#if !defined(WIN32) || defined(__CYGWIN__) + #include <sys/types.h> #include <sys/socket.h> #include <sys/stat.h> @@ -45,17 +48,24 @@ #include <netinet/in.h> #include <netdb.h> +#else /* pure windows */ + +#include <winsock2.h> + +#endif + /* private functions */ static void Socket_SendData(int socket, void *buffer, int bytes) { - int sofar, remaining, len; + ssize_t len; + int sofar, remaining; char *buf; buf = (char *)buffer; sofar = 0; remaining = bytes; do { - len = write(socket, buf + sofar, remaining); + len = send(socket, buf + sofar, remaining, 0); sofar += len; remaining -= len; } while(remaining > 0); @@ -63,18 +73,24 @@ static void Socket_SendData(int socket, void *buffer, int bytes) static long Socket_GetTime() { +#if !defined(WIN32) || defined(__CYGWIN__) struct timeval tp; gettimeofday(&tp, (struct timezone *)0); return (long)tp.tv_sec * 1000000 + (long)tp.tv_usec; +#else + return 0; +#endif } static void Socket_Idle(double delay) { +#if !defined(WIN32) || defined(__CYGWIN__) long t1 = Socket_GetTime(); while(1) { if(Socket_GetTime() - t1 > 1.e6 * delay) break; } +#endif } /* public interface */