]> SAFE projects GIT repository - jmp/mailleur/commitdiff
Before using poll instead of ppoll
authorJean-Marc Pigeon (Delson) <jmp@safe.ca>
Fri, 28 Mar 2025 13:55:11 +0000 (09:55 -0400)
committerJean-Marc Pigeon (Delson) <jmp@safe.ca>
Fri, 28 Mar 2025 13:55:11 +0000 (09:55 -0400)
Makefile
app/feeder.c
data-tst/feed00.tst
lib/devsoc.c
lib/devsoc.h
lib/gestcp.c
lib/gestcp.h
lib/subrou.c

index f11c1955d1c0f3069a2ebc04cf501f6680f1d94c..ccbadb2aa0c869f7147d661d92bc88bbd2a15472 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -54,7 +54,10 @@ tstfeed      :       debug
 #using gdb
 dbgfeed        :       debug
                @ gdb --args                            \
-                       bin/feeder $(FEEDPAR)
+                       bin/feeder                      \
+                               $(TESTIP)               \
+                               $(TESTPORT)             \
+                               $(DATATST)/feed00.tst
 
 #--------------------------------------------------------------------
 #starting email receiver
index bdd8a5f72bb977e008a56d17ccf56ee8f37f7c86..7272735352b8da0aa69c8a43ddda1a70939ded53 100644 (file)
@@ -18,6 +18,7 @@
 #include       "subrou.h"
 #include       "unipar.h"
 #include       "devsoc.h"
+#include       "gestcp.h"
 
 #define FNAME   "feeder"
 
@@ -86,6 +87,7 @@ static _Bool doincoming(SOCPTR *socptr,int numline,char *line)
 
 {
 #define OPEP    "tstfeed.c:doincoming"
+
 _Bool status;
 char *received;
 TIMESPEC attend;
@@ -94,35 +96,23 @@ _Bool proceed;
 
 status=false;
 received=(char *)0;
-attend.tv_sec=2;
+attend.tv_sec=WAITLINE;
 attend.tv_nsec=0;
 phase=0;
 proceed=true;
 while (proceed==true) {
   (void) fprintf(stdout,"JMPDBG %s, phase='%d'\n",OPEP,phase);
   switch (phase) {
-    case 0      :       //check for character
-      switch (soc_waitforchar(socptr,&attend)) {
-        case -1 :
-          (void) fprintf(stdout,"JMPDBG wait =-1\n");
-          phase=999;
-          break;
-        case 0  :
-          (void) fprintf(stdout,"JMPDBG wait =0\n");
-          phase=999;
-          break;
-        default :
-          break;
+    case 0      :       //waiting for a line with CRLF
+      if (tcp_getline(socptr,&attend,&received)==0) {
+        (void) fprintf(stdout,"Unable to receive line in due time\n");
+        phase=999;      //No need to go further
         }
       break;
     case 1      :       //get available character
-      break;
-    case 2      :       //get avail character
-      if (soc_getnextline(socptr,&received)>0) {
-        (void) fprintf(stdout,"Remote say <%s>\n",received);
-        received=rou_freestr(received);
-        status=true;
-        }
+      (void) fprintf(stdout,"Remote say <%s>\n",received);
+      received=rou_freestr(received);
+      status=true;
       break;
     default     :       //SAFE Guard
       proceed=false;
index cbf95ed2ddf20159ddf953e588a9efe367f8abe5..496c008be73fcd2da6c0b0217ed39c108c31268b 100644 (file)
@@ -5,7 +5,6 @@
 # # comment
 # < incoming data
 # > outgoing data
->
 <test test test
 >quit
 <test test test
index 8df1ae7754c0ebd1316f1995e36099d0badf4ef8..e32244f22153ecb05c0be580492929b68cc82ab8 100644 (file)
@@ -661,14 +661,17 @@ while (proceed==true) {
         phase=999;      //no need to go further
         }
       break;
-    case 1      :       //let close the socket
-      if (close(soc->handle)<0) {
+    case 1      :       //is the sockect detected closed
+      if (soc->handle<0)
+        phase=999;      //Socket allready closed
+      break;
+    case 2      :       //let close the socket
+      if (close(soc->handle)<0) 
         (void) rou_alert(0,"%s, error on closing socket '%s.%s' (error=<%s>)",
                             OPEP,soc->ip,soc->port,strerror(errno));
-        }
-      socptr=freesocket(socptr);
       break;
     default     :       //SAFE Guard
+      socptr=freesocket(socptr);
       proceed=false;
       break;
     }
@@ -874,6 +877,7 @@ if (soc!=(SOCTYP *)0) {
       polling[0].fd=soc->handle;
       break;
     }
+
   status=ppoll(polling,1,attend,(sigset_t *)0);
   switch (status) {
     case -1     :
@@ -889,9 +893,14 @@ if (soc!=(SOCTYP *)0) {
         soc->connected=false;
         status=0;
         }
+/*
       if ((polling[0].revents&POLLERR)==POLLERR) {
-        (void) rou_alert(0,"%s Polling POLLERR detection",OPEP);
+        (void) rou_alert(0,"%s Polling POLLERR",OPEP);
+        soc->handle=-1;
+        soc->connected=false;
+        status=0;
         }
+*/
       break;
     default     :
       break;
@@ -1050,8 +1059,7 @@ if (soc!=(SOCTYP *)0) {
           if (errno==EWOULDBLOCK)
             errno=EAGAIN;
           switch (errno) {
-            case EAGAIN     :    //no char available
-              (void) rou_alert(0,"%s JMPDBG NO char avail",OPEP);
+            case EAGAIN     :    //no char available yet
               break;
             case ECONNRESET :    //Connection reset by peer
               (void) rou_alert(0,"%s JMPDBG connection reset by peer",OPEP);
index c6797375dfa0a1c980ace394c340aac0f517598f..ad609666c31f4c95beeb349a2403c50efd76722f 100644 (file)
@@ -54,7 +54,7 @@ extern _Bool soc_openbinding(SOCPTR *socptr);
 //procedure to close ONE socket
 extern void soc_closebinding(SOCPTR *socptr);
 
-//procedure to wait form character on contact
+//procedure to wait for character from contact
 extern int soc_waitforchar(SOCPTR *socptr,TIMESPEC *attend);
 
 //procedure to return a char array with the available line
index b70cec71fc2f95f479ebfb471413df394a84c5f6..9652a93639b60fa1e3763fead25155183ef08e04 100644 (file)
@@ -63,6 +63,10 @@ while (proceed==true) {
           break;                //no need to read line
         case  0         :       //normal time out
           phase=999;            //no need to go further, no need to read line
+          (void) rou_alert(0,"%s JMPDBG no char? sec='%d', nsec='%d'",
+                               OPEP,attend->tv_sec,attend->tv_nsec);
+          if ((attend->tv_sec>0)||(attend->tv_nsec>0))
+            phase=0;            //waiting for a full line
           break;                
         default         :       //char available
           phase=0;              //check for new line
index 82c7ba3039328a19bff818d5680182eaa4dba862..7096e2b94c59f6846915e20418cd2eed189ccfaa 100644 (file)
@@ -13,6 +13,8 @@
 #include        "devlog.h"
 #include        "devsoc.h"
 
+#define         WAITLINE        10      //full line waiting time
+
 //read a line from contact up to CRLF
 extern int tcp_getline(SOCPTR *socptr,TIMESPEC *attend,char **lineptr);
 
index 1a34411d166036ee268733c70a1109d47ea0a972..e25be3388e3b35d3463f3b9dc451115d133909e2 100644 (file)
@@ -21,7 +21,7 @@
 
 //version definition 
 #define VERSION "0.6"
-#define RELEASE "21"
+#define RELEASE "22"
 
 //Public variables
 PUBLIC  int debug=0;            //debug level