00001
00017
00018
00019
00020
00021
00022
00023
00024 #include <sent/stddefs.h>
00025 #include <sent/tcpip.h>
00026
00027 #define BUFSZ 4096
00028
00029
00042 int
00043 rd(int fd, char *data, int *len, int maxlen)
00044 {
00045 int count=0;
00046 int tmpbytes, tmplen;
00047
00048 if ((tmpbytes=
00049 #ifdef WINSOCK
00050 recv(fd,(char *)len,sizeof(int),0)
00051 #else
00052 read(fd,(char *)len,sizeof(int))
00053 #endif
00054 ) != sizeof(int)) {
00055
00056 return(-1);
00057 }
00058 if (*len > maxlen) {
00059 j_printerr( "transfer data length exceeded: %d (>%d)\n",
00060 len, maxlen);
00061 return(-1);
00062 }
00063 while (count<(*len)){
00064
00065 tmplen = (*len) - count;
00066 if (tmplen > BUFSZ) tmplen = BUFSZ;
00067 if ((tmpbytes =
00068 #ifdef WINSOCK
00069 recv(fd,data+count,tmplen,0)
00070 #else
00071 read(fd,data+count,tmplen)
00072 #endif
00073 ) < 0) {
00074 j_printerr( "failed to read data at %d / %d\n",count, len);
00075 return(count);
00076 }
00077 count += tmpbytes;
00078 }
00079 return(count);
00080 }
00081
00091 int
00092 wt(int fd, char *data, int len)
00093 {
00094 int tmpbytes;
00095
00096
00097 if ((tmpbytes=
00098 #ifdef WINSOCK
00099 send(fd,(char *)&len,sizeof(int),0)
00100 #else
00101 write(fd,(char *)&len,sizeof(int))
00102 #endif
00103 ) != sizeof(int)) {
00104
00105 return(-1);
00106 }
00107 if (len > 0) {
00108 if ((tmpbytes=
00109 #ifdef WINSOCK
00110 send(fd,data,len,0)
00111 #else
00112 write(fd,data,len)
00113 #endif
00114 ) < 0) {
00115 j_printerr( "failed to write data (%d bytes)\n",len);
00116 return(-1);
00117 }
00118 } else {
00119 tmpbytes = 0;
00120 }
00121 return(tmpbytes);
00122 }