/* unable to send char return -1; */
/* */
/********************************************************/
-PUBLIC int tcp_fprintf(CONTYP *contact,const char *format,...)
+PUBLIC int tcp_write(CONTYP *contact,char *buffer,int parnum)
{
int sent;
-va_list args;
+int got;
+char zone[10];
-sent=0;
-va_start(args,format);
-sent=vdprintf(contact->channel,format,args);
-//(void) fdatasync(contact->channel);
-va_end(args);
+sent=-1;
+(void) strcpy(zone,"??");
+got=recv(contact->channel,zone,0,MSG_PEEK);
+switch (got) {
+ case -1 :
+ if (errno==EWOULDBLOCK)
+ errno=EAGAIN;
+ switch (errno) {
+ case EAGAIN :
+ sent=send(contact->channel,buffer,parnum,MSG_DONTWAIT);
+ break;
+ default :
+ (void) fprintf(stderr,"Got '%02d' error=<%s> (errno='%d')\n",
+ got,strerror(errno),errno);
+ break;
+ }
+ break;
+ default :
+ (void) fprintf(stderr,"Got '%02d' zone=<%s>\n",got,zone);
+ break;
+ }
return sent;
}
/*
}CONTYP;
//Transmit formated data to the contact channel
-extern int tcp_fprintf(CONTYP *contact,const char *format,...);
-
-//Wait for an input coming from the contact channel
-extern int *tcp_fscanf(CONTYP *contact,const char *format,...);
+extern int tcp_write(CONTYP *contact,char *buffer,int parnum);
//wait for an incoming contact
extern CONTYP *tcp_getcontact(SOCTYP *binding);
{
#define OPEP "modrec.c:contact"
-#define TESTL 4
+#define TESTL 30
CONTYP *contact;
int phase;
case 3 : //do contact
printf("Client channel=%d (pid=%d)\n",contact->channel,getpid());
for (int i=0;i<TESTL;i++) {
- (void) dprintf(contact->channel,"Remote pid=%d iter=%d/%d\n",
- getpid(),i,TESTL);
+ int sent;
+ char buffer[100];
+
+ printf("send string\n");
+ sprintf(buffer,"Remote pid=%d iter=%d/%d\n",getpid(),i,TESTL);
+ sent=tcp_write(contact,buffer,strlen(buffer));
+ printf("string sent '%d'\n",sent);
+ if (sent<0) {
+ (void) rou_alert(0,"%s, Unable to send data to remote",OPEP);
+ break;
+ }
(void) sleep(1);
}
break;