*/
/********************************************************/
/* */
+/* Procedure to check if a socket is connected */
+/* This procedure is called when pool exit with */
+/* en event. */
+/* */
+/********************************************************/
+static _Bool isconnected(SOCTYP *soc)
+
+{
+_Bool connected;
+char buffer[10];
+
+connected=true;
+if (recv(soc->handle,buffer,sizeof(buffer),MSG_PEEK|MSG_DONTWAIT)==0)
+ connected=false;
+return connected;
+}
+/*
+\f
+*/
+/********************************************************/
+/* */
/* Procedure to open plain incoming channel */
/* */
/********************************************************/
phase=0;
proceed=true;
while (proceed==true) {
+ (void) rou_alert(0,"JMPDBG %s phase='%d'",OPEP,phase);
switch (phase) {
case 0 : //Do we have parameters
if ((ip==(const char *)0)||(port==(const char *)0)) {
phase=999; //no need to go further
}
break;
- 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
+ case 3 : //connecting to remote
if (connect(handle,ai->ai_addr,ai->ai_addrlen)<0) {
switch (errno) {
case EINPROGRESS : //its acceptable
}
}
break;
+ case 4 : //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 5 : //setting newhandle working mode
+ if ((flags=fcntl(handle,F_SETFL,flags|O_NONBLOCK))<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 6 : //socket is now ready
soc=newsocket();
soc->proto=proto;
case 1 :
(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);
-
-/*
- if ((polling[0].revents&POLLERR)==POLLERR) {
- (void) rou_alert(0,"%s Polling POLLERR",OPEP);
- soc->handle=-1;
- soc->connected=false;
- status=0;
+ status=-2; //wlets say it is disconnected
+ if (isconnected(soc)==true) {
+ status=soc_receive(socptr);
+ (void) rou_alert(0,"%s JMPDBG soc_recieve status='%d'",OPEP,status);
}
-*/
break;
default :
break;