From: Jean-Marc Pigeon (Delson) Date: Fri, 28 Mar 2025 13:55:11 +0000 (-0400) Subject: Before using poll instead of ppoll X-Git-Tag: tag-0.7~53 X-Git-Url: https://jmp-git.ovh.safe.ca/?a=commitdiff_plain;h=07ffccbc25dff40e298328c8532f832a4b55a57e;p=jmp%2Fmailleur Before using poll instead of ppoll --- diff --git a/Makefile b/Makefile index f11c195..ccbadb2 100644 --- 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 diff --git a/app/feeder.c b/app/feeder.c index bdd8a5f..7272735 100644 --- a/app/feeder.c +++ b/app/feeder.c @@ -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; diff --git a/data-tst/feed00.tst b/data-tst/feed00.tst index cbf95ed..496c008 100644 --- a/data-tst/feed00.tst +++ b/data-tst/feed00.tst @@ -5,7 +5,6 @@ # # comment # < incoming data # > outgoing data -> quit 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); diff --git a/lib/devsoc.h b/lib/devsoc.h index c679737..ad60966 100644 --- a/lib/devsoc.h +++ b/lib/devsoc.h @@ -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 diff --git a/lib/gestcp.c b/lib/gestcp.c index b70cec7..9652a93 100644 --- a/lib/gestcp.c +++ b/lib/gestcp.c @@ -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 diff --git a/lib/gestcp.h b/lib/gestcp.h index 82c7ba3..7096e2b 100644 --- a/lib/gestcp.h +++ b/lib/gestcp.h @@ -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); diff --git a/lib/subrou.c b/lib/subrou.c index 1a34411..e25be33 100644 --- a/lib/subrou.c +++ b/lib/subrou.c @@ -21,7 +21,7 @@ //version definition #define VERSION "0.6" -#define RELEASE "21" +#define RELEASE "22" //Public variables PUBLIC int debug=0; //debug level