(void) dprintf(contact->channel,"JMPDBG Bingo!\n");
break;
default : //SAFE guard
+ proceed=false;
break;
}
phase++;
PUBLIC CONTYP *tcp_dropcontact(CONTYP *contact)
{
+#define OPEP "gestcp.c:tcp_dropcontact"
+
+int phase;
+_Bool proceed;
+
+phase=0;
+proceed=true;
+while (proceed==true) {
+ switch (phase){
+ case 0 : //check for binding
+ if (contact==(CONTYP *)0) {
+ (void) rou_alert(0,"%s Contact pointer is NULL (Bug!?)",OPEP);
+ phase=999; //not going further
+ }
+ break;
+ case 1 : //waiting from contact
+ if (shutdown(contact->channel,SHUT_RDWR)<0) {
+ switch (errno) {
+ case ENOTCONN : //already disconnect by other side!
+ break;
+ default :
+ (void) rou_alert(0,"%s unable to shutdown (errno=<%s>)",
+ OPEP,strerror(errno));
+ break;
+ }
+ }
+ (void) close(contact->channel);
+ break;
+ case 2 : //freeing contact memory
+ (void) free(contact);
+ contact=(CONTYP *)0;
+ break;
+ default : //SAFE guard
+ proceed=false;
+ break;
+ }
+ phase++;
+ }
return contact;
+#undef OPEP
}
/*
^L
}
break;
case 1 : //do contact
- (void) sleep(40); //JMPDBG
+ for (int i=0;i<20;i++) {
+ (void) sleep(3);
+ if ((reload==true)||(hangup==true))
+ break;
+ (void) dprintf(contact->channel,"JMPDBG pid=%d iteration=%d/%d\n",
+ getpid(),i,20);
+
+ }
break;
case 2 : //close contact
contact=tcp_dropcontact(contact);
break;
default : //SAFE guard
+ proceed=false;
break;
}
phase++;