=================================================================== RCS file: /home/cvs/OpenXM/src/kan96xx/plugin/file2.c,v retrieving revision 1.11 retrieving revision 1.18 diff -u -p -r1.11 -r1.18 --- OpenXM/src/kan96xx/plugin/file2.c 2004/12/16 08:42:14 1.11 +++ OpenXM/src/kan96xx/plugin/file2.c 2020/10/07 10:45:45 1.18 @@ -1,16 +1,22 @@ -/*$OpenXM: OpenXM/src/kan96xx/plugin/file2.c,v 1.10 2004/02/25 23:14:35 takayama Exp $ */ +/*$OpenXM: OpenXM/src/kan96xx/plugin/file2.c,v 1.17 2020/10/06 11:33:47 takayama Exp $ */ #include +#include #include #include #include +#include #include +#include #include "file2.h" +#include "mysig.h" +#include "sm1Socket.h" /* If you use file2 standalone to output string, make the following dummy definition; int KsocketSelect0(int a,int b) { return(0); } int oxSocketSelect0(int a,int b) { return(0); } or define FORSTRING +Real oxSocketSelect0 is defined in kan96xx/plugin/mytcpio.c */ #ifdef FORSTRING #define KsocketSelect0(a,b) 0 @@ -19,6 +25,7 @@ or define FORSTRING #ifdef KXX #define sGC_malloc(n) malloc(n) +int oxSocketSelect0(int fd,int t); #else void *sGC_malloc(int size); #endif @@ -91,17 +98,24 @@ void fp2setfp(FILE2 *fp2,FILE *fp,int popened) { int fp2fflush(FILE2 *fp2) { int r; if (debug1) { - printf("fp2fflush is called with FILE2 *%x.\n", (int )fp2); + printf("fp2fflush is called with FILE2 *%lx.\n", (long)fp2); fp2dumpBuffer(fp2); printf("--------------------------\n"); } if (checkfp2(fp2,"fp2fflush ") == -1) return(-1); if (fp2->fd == -1) return(0); if (fp2->writepos > 0) { + mysignal(SIGPIPE,SIG_IGN); r = write(fp2->fd,fp2->writeBuf,fp2->writepos); + mysignal(SIGPIPE,SIG_DFL); fp2->writepos = 0; if (r <= 0) { fprintf(stderr,"fp2fflush(): write failed on %d.\n",fp2->fd); + if (errno == EPIPE) { + fprintf(stderr,"Your peer is closed --- SIGPIPE. Closing this fp2.\n"); + fp2fclose(fp2); + return r; + } } return(r); }else{ @@ -130,7 +144,7 @@ int fp2fputc(int c,FILE2 *fp2) { FILE *fp; if (debug1) { printf("fp2fputc is called with %2x, fp2->writepos=%d, ",c,fp2->writepos); - printf("fp2 = %x.\n",(int) fp2); + printf("fp2 = %lx.\n",(long) fp2); } if (fp2->watch || WatchStream) { if (fp2->watch) fp = fp2->watchFile; @@ -276,7 +290,7 @@ int fp2clearReadBuf(FILE2 *fp2) { int fp2write(FILE2 *os, char *data, int size) { int i,r; for (i=0; i