#include "runtime.h"
#include "structdefs.h"
-#include <sys/socket.h>
#include <fcntl.h>
+#ifndef RAW
+#include <sys/socket.h>
#include <arpa/inet.h>
#include <strings.h>
-#include <errno.h>
#include <netdb.h>
+#endif
+#include <errno.h>
#include "SimpleHash.h"
#include "GenericHashtable.h"
-extern struct RuntimeHash *fdtoobject;
+struct RuntimeHash *fdtoobject;
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
+ return -1;
+#else
struct sockaddr_in sin;
int rc;
sin.sin_family= AF_INET;
sin.sin_port=htons(___port___);
sin.sin_addr.s_addr=htonl(*(int *)(((char *)&VAR(___address___)->___length___)+sizeof(int)));
-#ifdef THREADS
+#if defined(THREADS)||defined(DSTM)
#ifdef PRECISE_GC
struct listitem *tmp=stopforgc((struct garbagelist *)___params___);
#endif
do {
rc = connect(___fd___, (struct sockaddr *) &sin, sizeof(sin));
} while (rc<0 && errno==EINTR); /* repeat if interrupted */
-#ifdef THREADS
+#if defined(THREADS)||defined(DSTM)
#ifdef PRECISE_GC
restartaftergc(tmp);
#endif
error:
close(___fd___);
return -1;
+#endif
}
#ifdef TASK
int CALL12(___Socket______nativeBind_____AR_B_I, int ___port___, struct ArrayObject * ___address___, int ___port___) {
+#ifdef RAW
+ // not supported in RAW version
+ return -1;
+#else
int fd;
int rc;
socklen_t sa_size;
exit(-1);
#endif
#endif
+#endif
}
-struct ArrayObject * CALL01(___InetAddress______getHostByName_____AR_B, struct ___ArrayObject___ * ___hostname___) {
+struct ArrayObject * CALL01(___InetAddress______getHostByName_____AR_B, struct ArrayObject * ___hostname___) {
+#ifdef RAW
+ // not supported in RAW version
+ return NULL;
+#else
+//struct ArrayObject * CALL01(___InetAddress______getHostByName_____AR_B, struct ___ArrayObject___ * ___hostname___) {
int length=VAR(___hostname___)->___length___;
int i,j,n;
char * str=malloc(length+1);
}
return arraybytearray;
+#endif
}
int CALL12(___ServerSocket______createSocket____I, int port, struct ___ServerSocket___ * ___this___, int port) {
+#ifdef RAW
+ // not supported in RAW version
+ return -1;
+#else
int fd;
int n=1;
addreadfd(fd);
#endif
return fd;
+#endif
}
int CALL02(___ServerSocket______nativeaccept____L___Socket___,struct ___ServerSocket___ * ___this___, struct ___Socket___ * ___s___) {
+#ifdef RAW
+ // not supported in RAW version
+ return -1;
+#else
struct sockaddr_in sin;
unsigned int sinlen=sizeof(sin);
int fd=VAR(___this___)->___fd___;
int newfd;
-#ifdef THREADS
+#if defined(THREADS)||defined(DSTM)
#ifdef PRECISE_GC
struct listitem *tmp=stopforgc((struct garbagelist *)___params___);
#endif
#endif
newfd=accept(fd, (struct sockaddr *)&sin, &sinlen);
-#ifdef THREADS
+#if defined(THREADS)||defined(DSTM)
#ifdef PRECISE_GC
restartaftergc(tmp);
#endif
fcntl(newfd, F_SETFL, fcntl(fd, F_GETFL)|O_NONBLOCK);
RuntimeHashadd(fdtoobject, newfd, (int) VAR(___s___));
addreadfd(newfd);
+#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 newfd;
+#endif
}
void CALL24(___Socket______nativeWrite_____AR_B_I_I, int offset, int length, struct ___Socket___ * ___this___, struct ArrayObject * ___b___, int offset, int length) {
}
if (length!=0) {
+#ifndef RAW
perror("ERROR IN NATIVEWRITE");
printf("error=%d remaining bytes %d\n",errno, length);
+#endif
}
break;
}
char * charstr=malloc(length);
-#ifdef THREADS
+#if defined(THREADS)||defined(DSTM)
#ifdef PRECISE_GC
struct listitem *tmp=stopforgc((struct garbagelist *)___params___);
#endif
do {
byteread=read(fd, charstr, length);
} while(byteread==-1&&errno==EINTR);
-#ifdef THREADS
+#if defined(THREADS)||defined(DSTM)
#ifdef PRECISE_GC
restartaftergc(tmp);
#endif
if (byteread<0) {
+#ifndef RAW
printf("ERROR IN NATIVEREAD\n");
perror("");
+#endif
}
#ifdef TASK
+#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;
}
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);
}