switch to spaces only..
[IRC.git] / Robust / src / Runtime / socket.c
index 12f5d4396ecda18ec63b3b12929d0e280051bc4d..7ced4ce3775162f95e16ef702c90360cf6893359 100644 (file)
@@ -1,22 +1,24 @@
 #include "runtime.h"
 #include "structdefs.h"
+#ifndef MULTICORE
 #include <fcntl.h>
-#ifndef RAW
 #include <sys/socket.h>
 #include <arpa/inet.h>
 #include <strings.h>
 #include <netdb.h>
 #include <netinet/tcp.h>
-#endif
 #include <errno.h>
+#endif
 #include "SimpleHash.h"
 #include "GenericHashtable.h"
+#include "methodheaders.h"
 
 struct RuntimeHash *fdtoobject;
 
+#ifdef D___Socket______nativeConnect____I__AR_B_I
 int CALL24(___Socket______nativeConnect____I__AR_B_I, int ___fd___, int ___port___, struct ___Socket___ * ___this___, int ___fd___, struct ArrayObject * ___address___,int ___port___) {
-#ifdef RAW
-  // not supported in RAW version
+#ifdef MULTICORE
+  // not supported in MULTICORE version
   return -1;
 #else
   struct sockaddr_in sin;
@@ -28,7 +30,7 @@ int CALL24(___Socket______nativeConnect____I__AR_B_I, int ___fd___, int ___port_
   sin.sin_addr.s_addr=htonl(*(int *)(((char *)&VAR(___address___)->___length___)+sizeof(int)));
 #if defined(THREADS)||defined(DSTM)||defined(STM)
 #ifdef PRECISE_GC
-  struct listitem *tmp=stopforgc((struct garbagelist *)___params___);
+  stopforgc((struct garbagelist *)___params___);
 #endif
 #endif
   do {
@@ -36,13 +38,13 @@ int CALL24(___Socket______nativeConnect____I__AR_B_I, int ___fd___, int ___port_
   } while (rc<0 && errno==EINTR); /* repeat if interrupted */
 #if defined(THREADS)||defined(DSTM)||defined(STM)
 #ifdef PRECISE_GC
-  restartaftergc(tmp);
+  restartaftergc();
 #endif
 #endif
 
   {
-  int flag = 1;
-  setsockopt(___fd___, IPPROTO_TCP, TCP_NODELAY, (char *) &flag, sizeof(flag));
+    int flag = 1;
+    setsockopt(___fd___, IPPROTO_TCP, TCP_NODELAY, (char *) &flag, sizeof(flag));
   }
   if (rc<0) goto error;
 
@@ -61,20 +63,26 @@ error:
   return -1;
 #endif
 }
+#endif
 
 #ifdef TASK
-int CALL12(___Socket______nativeBindFD____I, int ___fd___, struct ___Socket___ * ___this___, int ___fd___) {
+#ifdef D___Socket______nativeBindFD____I
+void CALL12(___Socket______nativeBindFD____I, int ___fd___, struct ___Socket___ * ___this___, int ___fd___) {
+#ifdef MULTICORE
+#else
   if (RuntimeHashcontainskey(fdtoobject, ___fd___))
     RuntimeHashremovekey(fdtoobject, ___fd___);
   RuntimeHashadd(fdtoobject, ___fd___, (int) VAR(___this___));
   addreadfd(___fd___);
+#endif
 }
 #endif
+#endif
 
-
+#ifdef D___Socket______nativeBind_____AR_B_I
 int CALL12(___Socket______nativeBind_____AR_B_I, int ___port___,  struct ArrayObject * ___address___, int ___port___) {
-#ifdef RAW
-  // not supported in RAW version
+#ifdef MULTICORE
+  // not supported in MULTICORE version
   return -1;
 #else
   int fd;
@@ -129,10 +137,12 @@ error:
 #endif
 #endif
 }
+#endif
 
+#ifdef D___InetAddress______getHostByName_____AR_B
 struct ArrayObject * CALL01(___InetAddress______getHostByName_____AR_B, struct ArrayObject * ___hostname___) {
-#ifdef RAW
-  // not supported in RAW version
+#ifdef MULTICORE
+  // not supported in MULTICORE version
   return NULL;
 #else
 //struct ArrayObject * CALL01(___InetAddress______getHostByName_____AR_B, struct ___ArrayObject___ * ___hostname___) {
@@ -149,39 +159,44 @@ struct ArrayObject * CALL01(___InetAddress______getHostByName_____AR_B, struct A
   h=gethostbyname(str);
   free(str);
 
-  for (n=0; h->h_addr_list[n]; n++) /* do nothing */ ;
+  if (h != NULL) {
+    for (n=0; h->h_addr_list[n]; n++) /* do nothing */;
 
 #ifdef PRECISE_GC
-  arraybytearray=allocate_newarray(___params___,BYTEARRAYARRAYTYPE,n);
+    arraybytearray=allocate_newarray(___params___,BYTEARRAYARRAYTYPE,n);
 #else
-  arraybytearray=allocate_newarray(BYTEARRAYARRAYTYPE,n);
+    arraybytearray=allocate_newarray(BYTEARRAYARRAYTYPE,n);
 #endif
-  for(i=0; i<n; i++) {
-    struct ArrayObject *bytearray;
+    for(i=0; i<n; i++) {
+      struct ArrayObject *bytearray;
 #ifdef PRECISE_GC
-    {
-      INTPTR ptrarray[]={1, (INTPTR) ___params___, (INTPTR)arraybytearray};
-      bytearray=allocate_newarray(&ptrarray,BYTEARRAYTYPE,h->h_length);
-      arraybytearray=(struct ArrayObject *) ptrarray[2];
-    }
+      {
+        INTPTR ptrarray[]={1, (INTPTR) ___params___, (INTPTR)arraybytearray};
+        bytearray=allocate_newarray(&ptrarray,BYTEARRAYTYPE,h->h_length);
+        arraybytearray=(struct ArrayObject *) ptrarray[2];
+      }
 #else
-    bytearray=allocate_newarray(BYTEARRAYTYPE,h->h_length);
+      bytearray=allocate_newarray(BYTEARRAYTYPE,h->h_length);
 #endif
-    ((void **)&((&arraybytearray->___length___)[1]))[i]=bytearray;
-    {
-      int ha=ntohl(*(int *)h->h_addr_list[i]);
-      (&bytearray->___length___)[1]=ha;
+      ((void **)&((&arraybytearray->___length___)[1]))[i]=bytearray;
+      {
+        int ha=ntohl(*(int *)h->h_addr_list[i]);
+        (&bytearray->___length___)[1]=ha;
+      }
     }
-  }
 
-  return arraybytearray;
+    return arraybytearray;
+  } else {
+    return NULL;
+  }
 #endif
 }
+#endif
 
-
+#ifdef D___ServerSocket______createSocket____I
 int CALL12(___ServerSocket______createSocket____I, int port, struct ___ServerSocket___ * ___this___, int port) {
-#ifdef RAW
-  // not supported in RAW version
+#ifdef MULTICORE
+  // not supported in MULTICORE version
   return -1;
 #else
   int fd;
@@ -283,10 +298,12 @@ int CALL12(___ServerSocket______createSocket____I, int port, struct ___ServerSoc
   return fd;
 #endif
 }
+#endif
 
+#ifdef D___ServerSocket______nativeaccept____L___Socket___
 int CALL02(___ServerSocket______nativeaccept____L___Socket___,struct ___ServerSocket___ * ___this___, struct ___Socket___ * ___s___) {
-#ifdef RAW
-  // not supported in RAW version
+#ifdef MULTICORE
+  // not supported in MULTICORE version
   return -1;
 #else
   struct sockaddr_in sin;
@@ -295,7 +312,7 @@ int CALL02(___ServerSocket______nativeaccept____L___Socket___,struct ___ServerSo
   int newfd;
 #if defined(THREADS)||defined(DSTM)||defined(STM)
 #ifdef PRECISE_GC
-  struct listitem *tmp=stopforgc((struct garbagelist *)___params___);
+  stopforgc((struct garbagelist *)___params___);
 #endif
 #endif
   newfd=accept(fd, (struct sockaddr *)&sin, &sinlen);
@@ -303,7 +320,7 @@ int CALL02(___ServerSocket______nativeaccept____L___Socket___,struct ___ServerSo
   setsockopt(newfd, IPPROTO_TCP, TCP_NODELAY, (char *) &flag, sizeof(flag));
 #if defined(THREADS)||defined(DSTM)||defined(STM)
 #ifdef PRECISE_GC
-  restartaftergc(tmp);
+  restartaftergc();
 #endif
 #endif
   if (newfd<0) {
@@ -328,8 +345,6 @@ int CALL02(___ServerSocket______nativeaccept____L___Socket___,struct ___ServerSo
 #ifdef MULTICORE
   flagorand(VAR(___this___),0,0xFFFFFFFE,NULL,0);
   enqueueObject(VAR(___this___), NULL, 0);
-  //flagorand(VAR(___this___),0,0xFFFFFFFE,objq4socketobj[corenum],numqueues4socketobj[corenum]);
-  //enqueueObject(VAR(___this___), objq4socketobj[corenum], numqueues4socketobj[corenum]);
 #else
   flagorand(VAR(___this___),0,0xFFFFFFFE);
   enqueueObject(VAR(___this___));
@@ -338,8 +353,12 @@ int CALL02(___ServerSocket______nativeaccept____L___Socket___,struct ___ServerSo
   return newfd;
 #endif
 }
+#endif
 
+#ifdef D___Socket______nativeWrite_____AR_B_I_I
 void CALL24(___Socket______nativeWrite_____AR_B_I_I, int offset, int length, struct ___Socket___ * ___this___, struct ArrayObject * ___b___, int offset, int length) {
+#ifdef MULTICORE
+#else
   int fd=VAR(___this___)->___fd___;
   char * charstr=((char *)&VAR(___b___)->___length___)+sizeof(int)+offset;
   while(1) {
@@ -348,22 +367,27 @@ void CALL24(___Socket______nativeWrite_____AR_B_I_I, int offset, int length, str
     while(length>0) {
       bytewritten=write(fd, &charstr[offset], length);
       if (bytewritten==-1&&errno!=EAGAIN)
-       break;
+        break;
       length-=bytewritten;
       offset+=bytewritten;
     }
 
     if (length!=0) {
-#ifndef RAW
       perror("ERROR IN NATIVEWRITE");
       printf("error=%d remaining bytes %d\n",errno, length);
-#endif
     }
     break;
   }
+#endif
 }
+#endif
 
+
+#ifdef D___Socket______nativeRead_____AR_B
 int CALL02(___Socket______nativeRead_____AR_B, struct ___Socket___ * ___this___, struct ArrayObject * ___b___) {
+#ifdef MULTICORE
+  return -1;
+#else
   int fd=VAR(___this___)->___fd___;
   int length=VAR(___b___)->___length___;
 
@@ -371,7 +395,7 @@ int CALL02(___Socket______nativeRead_____AR_B, struct ___Socket___ * ___this___,
 
 #if defined(THREADS)||defined(DSTM)||defined(STM)
 #ifdef PRECISE_GC
-  struct listitem *tmp=stopforgc((struct garbagelist *)___params___);
+  stopforgc((struct garbagelist *)___params___);
 #endif
 #endif
   int byteread=-1;
@@ -381,7 +405,7 @@ int CALL02(___Socket______nativeRead_____AR_B, struct ___Socket___ * ___this___,
   } while(byteread==-1&&errno==EINTR);
 #if defined(THREADS)||defined(DSTM)||defined(STM)
 #ifdef PRECISE_GC
-  restartaftergc(tmp);
+  restartaftergc();
 #endif
 #endif
 
@@ -395,7 +419,7 @@ int CALL02(___Socket______nativeRead_____AR_B, struct ___Socket___ * ___this___,
 
 
   if (byteread<0) {
-#ifndef RAW
+#ifndef MULTICORE
     printf("ERROR IN NATIVEREAD\n");
     perror("");
 #endif
@@ -404,32 +428,30 @@ int CALL02(___Socket______nativeRead_____AR_B, struct ___Socket___ * ___this___,
 #ifdef MULTICORE
   flagorand(VAR(___this___),0,0xFFFFFFFE,NULL,0);
   enqueueObject(VAR(___this___), NULL, 0);
-  //flagorand(VAR(___this___),0,0xFFFFFFFE,objq4socketobj[corenum],numqueues4socketobj[corenum]);
-  //enqueueObject(VAR(___this___),objq4socketobj[corenum],numqueues4socketobj[corenum]);
 #else
   flagorand(VAR(___this___),0,0xFFFFFFFE);
   enqueueObject(VAR(___this___));
 #endif
 #endif
   return byteread;
+#endif
 }
+#endif
 
+#ifdef D___Socket______nativeClose____
 void CALL01(___Socket______nativeClose____, struct ___Socket___ * ___this___) {
+#ifdef MULTICORE
+#else
   int fd=VAR(___this___)->___fd___;
   int data;
 #ifdef TASK
   RuntimeHashget(fdtoobject, fd, &data);
   RuntimeHashremove(fdtoobject, fd, data);
   removereadfd(fd);
-#ifdef MULTICORE
-  flagorand(VAR(___this___),0,0xFFFFFFFE,NULL,0);
-  enqueueObject(VAR(___this___), NULL, 0);
-  //flagorand(VAR(___this___),0,0xFFFFFFFE,objq4socketobj[corenum],numqueues4socketobj[corenum]);
-  //enqueueObject(VAR(___this___),objq4socketobj[corenum],numqueues4socketobj[corenum]);
-#else
   flagorand(VAR(___this___),0,0xFFFFFFFE);
   enqueueObject(VAR(___this___));
-#endif
 #endif
   close(fd);
+#endif
 }
+#endif