]> SAFE projects GIT repository - jmp/mailleur/commitdiff
Still not able to detect remote shutdown
authorJean-Marc Pigeon (Delson) <jmp@safe.ca>
Mon, 31 Mar 2025 18:27:56 +0000 (14:27 -0400)
committerJean-Marc Pigeon (Delson) <jmp@safe.ca>
Mon, 31 Mar 2025 18:27:56 +0000 (14:27 -0400)
lib/devsoc.c
lib/subrou.c

index 9d6d963bbe93d52a6f8f1c1c02380987599368d8..035ad6f4c7e77717e8717e617d79d6f2e94ffe4f 100644 (file)
@@ -558,6 +558,7 @@ PUBLIC SOCPTR *soc_openonesock(PROTYP proto,const char *ip,const char *port)
 SOCTYP *soc;
 int status;
 int handle;
+int flags;
 fd_set rset;
 fd_set wset;
 struct addrinfo hints;
@@ -568,6 +569,7 @@ _Bool proceed;
 soc=(SOCTYP *)0;
 status=0;
 handle=0;
+flags=0;
 FD_ZERO(&rset);
 FD_ZERO(&wset);
 (void) memset(&hints,'\000',sizeof(hints));
@@ -601,7 +603,23 @@ while (proceed==true) {
         phase=999;      //no need to go further
         }
       break;
-    case 3      :       //connecting to remote
+    case 3      :       //getting newhandle flag
+      if ((flags=fcntl(handle,F_GETFL,0))<0) {
+        (void) rou_core_dump("%s, Unable to get socket descripteur on "
+                             "IP/PORT <%s/%s> (Bug? error=<%s>)",
+                              OPEP,soc->ip,soc->port,strerror(errno));
+        phase=999;      //never reached
+        }
+      break;
+    case 4      :       //setting newhandle working mode
+      if ((flags=fcntl(handle,F_SETFL,flags|O_NONBLOCK|O_ASYNC))<0) {
+        (void) rou_core_dump("%s, Unable to set socket descripteur on "
+                             "IP/PORT <%s/%s> (Bug? error=<%s>)",
+                              OPEP,soc->ip,soc->port,strerror(errno));
+        phase=999;      //never reached
+        }
+      break;
+    case 5      :       //connecting to remote
       if (connect(handle,ai->ai_addr,ai->ai_addrlen)<0) {
         switch (errno) {
           case EINPROGRESS      :       //its acceptable
@@ -615,7 +633,7 @@ while (proceed==true) {
           }
         }
       break;
-    case 4      :       //socket is now ready
+    case 6      :       //socket is now ready
       soc=newsocket();
       soc->proto=proto;
       soc->connected=true;
@@ -890,9 +908,12 @@ if (soc!=(SOCTYP *)0) {
       (void) rou_alert(0,"%s Polling timeout millisec='%d'",OPEP,millisec);
       break;
     case 1      :
-      (void) rou_alert(0,"%s Polling return millisec='%d'",OPEP,millisec);
+      (void) rou_alert(0,"%s Polling return millisec='%d' revent='%08x",
+                          OPEP,millisec,polling[0].revents);
       //(void) usleep(500000);
       status=soc_receive(socptr);
+      (void) rou_alert(0,"%s JMPDBG recv status='%d'",OPEP,
+                         recv(soc->handle,(char *)0,0,MSG_DONTWAIT|MSG_PEEK));
       (void) rou_alert(0,"%s JMPDBG soc_recieve status='%d'",OPEP,status);
 
 /*
@@ -1072,6 +1093,7 @@ while (proceed==true) {
       limit=(soc->maxcarin-soc->carin);
       (void) memset(buffer,'\000',limit);
       limit--;
+      errno=0;
       switch (soc->modtls) {
         case true   :
           got=tls_read(soc->tls,buffer,limit);
@@ -1080,7 +1102,8 @@ while (proceed==true) {
           got=recv(soc->handle,buffer,limit,MSG_DONTWAIT);
           break;
         }
-      (void) rou_alert(0,"%s, JMPDBG got=%d char buffer=<%s>",OPEP,got,buffer);
+      (void) rou_alert(0,"%s, JMPDBG got=%d char buffer=<%s> errno='%d'",
+                          OPEP,got,buffer,errno);
       break;
     case 3      :       //check about recieved data
       switch (got) {
index bf4a41b5e1003890ab5ded3dda7af6219475d8a6..48e0f6f294b2febe1569597c1eab15a7210d1c17 100644 (file)
@@ -21,7 +21,7 @@
 
 //version definition 
 #define VERSION "0.6"
-#define RELEASE "34"
+#define RELEASE "35"
 #define BRANCH "dvl"
 
 //Public variables