#using gdb
dbgfeed : debug
@ gdb --args \
- bin/feeder $(FEEDPAR)
+ bin/feeder \
+ $(TESTIP) \
+ $(TESTPORT) \
+ $(DATATST)/feed00.tst
#--------------------------------------------------------------------
#starting email receiver
#include "subrou.h"
#include "unipar.h"
#include "devsoc.h"
+#include "gestcp.h"
#define FNAME "feeder"
{
#define OPEP "tstfeed.c:doincoming"
+
_Bool status;
char *received;
TIMESPEC attend;
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;
# # comment
# < incoming data
# > outgoing data
->
<test test test
>quit
<test test test
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;
}
polling[0].fd=soc->handle;
break;
}
+
status=ppoll(polling,1,attend,(sigset_t *)0);
switch (status) {
case -1 :
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;
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);
//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
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
#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);
//version definition
#define VERSION "0.6"
-#define RELEASE "21"
+#define RELEASE "22"
//Public variables
PUBLIC int debug=0; //debug level