From: Jean-Marc Pigeon (Delson) Date: Mon, 31 Mar 2025 18:27:56 +0000 (-0400) Subject: Still not able to detect remote shutdown X-Git-Tag: tag-0.7~40 X-Git-Url: https://jmp-git.ovh.safe.ca/?a=commitdiff_plain;h=8e4be5f4c2480702e5624e85f6d99a0439b4cc97;p=jmp%2Fmailleur Still not able to detect remote shutdown --- diff --git a/lib/devsoc.c b/lib/devsoc.c index 9d6d963..035ad6f 100644 --- a/lib/devsoc.c +++ b/lib/devsoc.c @@ -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) { diff --git a/lib/subrou.c b/lib/subrou.c index bf4a41b..48e0f6f 100644 --- a/lib/subrou.c +++ b/lib/subrou.c @@ -21,7 +21,7 @@ //version definition #define VERSION "0.6" -#define RELEASE "34" +#define RELEASE "35" #define BRANCH "dvl" //Public variables