2 #include "structdefs.h"
3 #include <sys/socket.h>
7 #include "SimpleHash.h"
8 #include "GenericHashtable.h"
9 extern struct RuntimeHash *fdtoobject;
11 int ___ServerSocket______createSocket____I(struct ___ServerSocket___ * sock, int port) {
15 struct sockaddr_in sin;
17 bzero (&sin, sizeof (sin));
18 sin.sin_family = AF_INET;
19 sin.sin_port = htons (port);
20 sin.sin_addr.s_addr = htonl (INADDR_ANY);
21 fd=socket(AF_INET, SOCK_STREAM, 0);
25 printf("createSocket error #1\n");
27 longjmp(error_handler,5);
30 if (setsockopt (fd, SOL_SOCKET, SO_REUSEADDR, (char *)&n, sizeof (n)) < 0) {
34 printf("createSocket error #2\n");
36 longjmp(error_handler, 6);
38 fcntl(fd, F_SETFD, 1);
39 fcntl(fd, F_SETFL, fcntl(fd, F_GETFL)|O_NONBLOCK);
42 if (bind(fd, (struct sockaddr *) &sin, sizeof(sin))<0) {
46 printf("createSocket error #3\n");
48 longjmp(error_handler, 7);
52 if (listen(fd, 5)<0) {
56 printf("createSocket error #4\n");
58 longjmp(error_handler, 8);
61 /* Store the fd/socket object mapping */
62 RuntimeHashadd(fdtoobject, fd, (int) sock);
67 int ___ServerSocket______nativeaccept____L___Socket___(struct ___ServerSocket___ * serversock, struct ___Socket___ * sock) {
68 struct sockaddr_in sin;
69 unsigned int sinlen=sizeof(sin);
70 int fd=serversock->___fd___;
72 newfd=accept(fd, (struct sockaddr *)&sin, &sinlen);
78 printf("acceptSocket error #1\n");
80 longjmp(error_handler, 9);
82 fcntl(newfd, F_SETFL, fcntl(fd, F_GETFL)|O_NONBLOCK);
84 RuntimeHashadd(fdtoobject, newfd, (int) sock);
86 flagorand(serversock,0,0xFFFFFFFE);
91 void ___Socket______nativeWrite_____AR_B(struct ___Socket___ * sock, struct ArrayObject * ao) {
92 int fd=sock->___fd___;
93 int length=ao->___length___;
94 char * charstr=((char *)& ao->___length___)+sizeof(int);
95 int bytewritten=write(fd, charstr, length);
96 if (bytewritten!=length) {
97 printf("ERROR IN NATIVEWRITE\n");
99 // flagorand(sock,0,0xFFFFFFFE);
102 int ___Socket______nativeRead_____AR_B(struct ___Socket___ * sock, struct ArrayObject * ao) {
103 int fd=sock->___fd___;
104 int length=ao->___length___;
105 char * charstr=((char *)& ao->___length___)+sizeof(int);
106 int byteread=read(fd, charstr, length);
109 printf("ERROR IN NATIVEREAD\n");
111 flagorand(sock,0,0xFFFFFFFE);
115 void ___Socket______nativeClose____(struct ___Socket___ * sock) {
116 int fd=sock->___fd___;
118 RuntimeHashget(fdtoobject, fd, &data);
119 RuntimeHashremove(fdtoobject, fd, data);
122 flagorand(sock,0,0xFFFFFFFE);