add buffered send method
authorbdemsky <bdemsky>
Tue, 22 Sep 2009 20:42:31 +0000 (20:42 +0000)
committerbdemsky <bdemsky>
Tue, 22 Sep 2009 20:42:31 +0000 (20:42 +0000)
Robust/src/Runtime/DSTM/interface/readstruct.h
Robust/src/Runtime/DSTM/interface/trans.c

index ffd1a47d2fb44654c41747c3b32f85ee8eac1417..2cd831186bf52f0cd7f84d26d3da5bfe2e26d5f3 100644 (file)
@@ -7,7 +7,16 @@ struct readstruct {
   int tail;
 };
 
+#define WMAXBUF 2048
+#define WTOP 512
+struct writestruct {
+  char buf[WMAXBUF];
+  int offset;
+};
+
 void recv_data_buf(int fd, struct readstruct *, void *buffer, int buflen);
 int recv_data_errorcode_buf(int fd, struct readstruct *, void *buffer, int buflen);
+void send_buf(int fd, struct writestruct * sendbuffer, void *buffer, int buflen);
+void forcesend_buf(int fd, struct writestruct * sendbuffer, void *buffer, int buflen);
 
 #endif
index f0523147825d7dd0a658514a1cbfc90574ce6c71..51d143587a82e53b1499b009e98771dce0f979bf 100644 (file)
@@ -109,41 +109,38 @@ void send_data(int fd, void *buf, int buflen) {
   }
 }
 
-void recv_dataz(int fd, void *buf, int buflen) {
-  char *buffer = (char *)(buf);
-  int size = buflen;
-  int numbytes;
-  while (size > 0) {
-    numbytes = recv(fd, buffer, size, 0);
-    bytesRecv = bytesRecv + numbytes;
-    if (numbytes == -1) {
-      perror("recv");
-      exit(0);
-    }
-    buffer += numbytes;
-    size -= numbytes;
+void send_buf(int fd, struct writestruct * sendbuffer, void *buffer, int buflen) {
+  if (buflen+sendbuffer->offset>WMAXBUF) {
+    send_data(fd, sendbuffer->buf, sendbuffer->offset);
+    sendbuffer->offset=0;
+    send_data(fd, buffer, buflen);
+    return;
+  }
+  memcpy(&sendbuffer->buf[sendbuffer->offset], buffer, buflen);
+  sendbuffer->offset+=buflen;
+  if (sendbuffer->offset>WTOP) {
+    send_data(fd, sendbuffer->buf, sendbuffer->offset);
+    sendbuffer->offset=0;
   }
 }
 
-int recv_data_errorcodez(int fd, void *buf, int buflen) {
-  char *buffer = (char *)(buf);
-  int size = buflen;
-  int numbytes;
-  while (size > 0) {
-    numbytes = recv(fd, buffer, size, 0);
-    if (numbytes==0)
-      return 0;
-    if (numbytes == -1) {
-      perror("recv");
-      return -1;
-    }
-    buffer += numbytes;
-    size -= numbytes;
+void forcesend_buf(int fd, struct writestruct * sendbuffer, void *buffer, int buflen) {
+  if (buflen+sendbuffer->offset>WMAXBUF) {
+    send_data(fd, sendbuffer->buf, sendbuffer->offset);
+    sendbuffer->offset=0;
+    send_data(fd, buffer, buflen);
+    return;
   }
-  return 1;
+  memcpy(&sendbuffer->buf[sendbuffer->offset], buffer, buflen);
+  sendbuffer->offset+=buflen;
+  send_data(fd, sendbuffer->buf, sendbuffer->offset);
+  sendbuffer->offset=0;
 }
 
-
+int recvw(int fd, void *buf, int len, int flags) {
+  return recv(fd, buf, len, flags);
+}
 void recv_data_buf(int fd, struct readstruct * readbuffer, void *buffer, int buflen) {
   char *buf=(char *)buffer;
   int numbytes=readbuffer->head-readbuffer->tail;
@@ -159,7 +156,7 @@ void recv_data_buf(int fd, struct readstruct * readbuffer, void *buffer, int buf
     return;
   }
   if (buflen>=MAXBUF) {
-    recv_dataz(fd, buf, buflen);
+    recv_data(fd, buf, buflen);
     return;
   }
   
@@ -168,7 +165,7 @@ void recv_data_buf(int fd, struct readstruct * readbuffer, void *buffer, int buf
   readbuffer->head=0;
   
   while (buflen > 0) {
-    int numbytes = recv(fd, &readbuffer->buf[readbuffer->head], maxbuf, 0);
+    int numbytes = recvw(fd, &readbuffer->buf[readbuffer->head], maxbuf, 0);
     if (numbytes == -1) {
       perror("recv");
       exit(0);
@@ -197,7 +194,7 @@ int recv_data_errorcode_buf(int fd, struct readstruct * readbuffer, void *buffer
     return 1;
 
   if (buflen>=MAXBUF) {
-    return recv_data_errorcodez(fd, buf, buflen);
+    return recv_data_errorcode(fd, buf, buflen);
   }
 
   int maxbuf=MAXBUF;
@@ -205,7 +202,7 @@ int recv_data_errorcode_buf(int fd, struct readstruct * readbuffer, void *buffer
   readbuffer->head=0;
   
   while (buflen > 0) {
-    int numbytes = recv(fd, &readbuffer->buf[readbuffer->head], maxbuf, 0);
+    int numbytes = recvw(fd, &readbuffer->buf[readbuffer->head], maxbuf, 0);
     if (numbytes ==0) {
       return 0;
     }
@@ -228,7 +225,7 @@ void recv_data(int fd, void *buf, int buflen) {
   int size = buflen;
   int numbytes;
   while (size > 0) {
-    numbytes = recv(fd, buffer, size, 0);
+    numbytes = recvw(fd, buffer, size, 0);
     bytesRecv = bytesRecv + numbytes;
     if (numbytes == -1) {
       perror("recv");
@@ -244,7 +241,7 @@ int recv_data_errorcode(int fd, void *buf, int buflen) {
   int size = buflen;
   int numbytes;
   while (size > 0) {
-    numbytes = recv(fd, buffer, size, 0);
+    numbytes = recvw(fd, buffer, size, 0);
     if (numbytes==0)
       return 0;
     if (numbytes == -1) {