diff --git a/Fltk/Socket.cpp b/Fltk/Socket.cpp
index f5d95ecdef03481a021c33734398db24e4766a51..b1ab0b913c5e02d9af62c0f21d0769ee4fe49c94 100644
--- a/Fltk/Socket.cpp
+++ b/Fltk/Socket.cpp
@@ -1,4 +1,4 @@
-/* $Id: Socket.cpp,v 1.4 2001-05-03 01:04:07 geuzaine Exp $ */
+/* $Id: Socket.cpp,v 1.5 2001-05-04 11:53:01 geuzaine Exp $ */
 
 #include <stdio.h>
 #include <stdlib.h>
@@ -150,12 +150,28 @@ int Socket_StopProgram(char *progname, char *sockname, int sock){
   return 0;
 }
 
+long Socket_GetTime(){
+  struct timeval tp;
+  gettimeofday(&tp, (struct timezone *)0);
+  return (long)tp.tv_sec * 1000000 + (long)tp.tv_usec;
+}
+
+void Socket_Idle(double delay){
+  long t1 = Socket_GetTime();
+  while(1){
+    if(Socket_GetTime() - t1 > 1.e6*delay) break;
+  }
+}
 
 int Socket_Connect(char *sockname){
   struct sockaddr_un addr;
   int len, sock;
   int tries;
 
+  /* slight delay to be sure that the socket gets created by the
+     server before we attempt to connect to it... */
+  Socket_Idle(0.1);
+
   /* create socket */
   sock = socket(PF_UNIX, SOCK_STREAM, 0);
   if (sock<0){
@@ -169,7 +185,7 @@ int Socket_Connect(char *sockname){
   len = strlen(addr.sun_path)+sizeof(addr.sun_family);
   for (tries=0;tries<5;tries++) {
     if (connect(sock, (struct sockaddr *)&addr, len) < 0) {
-      Msg(GERROR, "Socket connect failed");
+      Msg(WARNING, "Socket connect failed on '%s'", sockname);
     }
     else {
       return sock;
diff --git a/Fltk/Solvers.cpp b/Fltk/Solvers.cpp
index ff83bedc8eda68225c2bc053dae663098b93764e..bec18c3e50fb27cbe962dfe555ff1055bb2169e8 100644
--- a/Fltk/Solvers.cpp
+++ b/Fltk/Solvers.cpp
@@ -1,4 +1,4 @@
-// $Id: Solvers.cpp,v 1.1 2001-05-03 00:09:42 geuzaine Exp $
+// $Id: Solvers.cpp,v 1.2 2001-05-04 11:53:01 geuzaine Exp $
 
 #include "Gmsh.h"
 
@@ -43,11 +43,11 @@ extern GUI       *WID;
 _GetDP_Info GetDP_Info ;
 
 int GetDP(char *args){
-  int sock, i, n ;
+  int sock, type, i, n ;
   char progname[1000], sockname[1000], str[1000];
 
   GET_PATH(sockname);
-  strcat(sockname, ".gmsh-socket-GetDP");
+  strcat(sockname, ".gmshsock");
 
   sprintf(progname, "getdp %s", args);
   sock = Socket_StartProgram(progname, sockname);
@@ -56,37 +56,40 @@ int GetDP(char *args){
     return 0;
   }
 
+  Msg(INFO, "GetDP start (%s)", progname);
+
   GetDP_Info.nbres = 0;
   GetDP_Info.nbpostop = 0;
 
   while(1){
-    Socket_ReceiveInt(sock, &i);
+    Socket_ReceiveInt(sock, &type);
 
-    if(i<0){
-      Msg(INFO, "Finished '%s'", progname);
-      break;
-    }
+    if(type == GETDP_END) break;
 
     Socket_ReceiveString(sock, str);
 
-    switch(i){
-    case 10 : // status
+    switch(type){
+    case GETDP_PROGRESS :
       Msg(STATUS3N, "GetDP %s", str);
       break ;
-    case 101 : // available resolution
+    case GETDP_RESOLUTION_NAME :
       strcpy(GetDP_Info.res[GetDP_Info.nbres++],str);
       break ;
-    case 102 : // available postoperations
+    case GETDP_POSTOPERATION_NAME :
       strcpy(GetDP_Info.postop[GetDP_Info.nbpostop++],str);
       break ;
-    case 200 : // load postprocessing file
+    case GETDP_LOAD_VIEW :
       n = List_Nbr(Post_ViewList);
       MergeProblem(str);
       Draw(); 
       if(n != List_Nbr(Post_ViewList))
 	WID->set_context(menu_post, 0);
       break ;
+    case GETDP_INFO :
+      Msg(DIRECT, "GetDP > %s", str);
+      break;
     default :
+      Msg(WARNING, "Unknown type of message received from GetDP");
       Msg(DIRECT, "GetDP > %s", str);
       break ;
     }
@@ -107,9 +110,12 @@ int GetDP(char *args){
     WID->getdp_choice[1]->value(0);
   }
 
+  Msg(STATUS3N, "");
 
   Socket_StopProgram(progname, sockname, sock);
 
+  Msg(INFO, "GetDP stop (%s)", progname);
+
   return 1;
 }
 
diff --git a/Fltk/Solvers.h b/Fltk/Solvers.h
index 3ce22bd07517247c86dcb2bf247e833817546675..c76c494ab0add4b5dce1b84a1be617d18f2523bf 100644
--- a/Fltk/Solvers.h
+++ b/Fltk/Solvers.h
@@ -1,6 +1,14 @@
 #ifndef _SOLVERS_H_
 #define _SOLVERS_H_
 
+// Message protocol for GetDP
+
+#define GETDP_END                 -1
+#define GETDP_INFO                 1
+#define GETDP_PROGRESS             2
+#define GETDP_RESOLUTION_NAME      3
+#define GETDP_POSTOPERATION_NAME   4
+#define GETDP_LOAD_VIEW            5
 
 typedef struct{
   int nbres, nbpostop;