about summary refs log tree commit diff stats
path: root/091socket.cc
diff options
context:
space:
mode:
authorKartik K. Agaram <vc@akkartik.com>2016-10-07 13:55:47 -0700
committerKartik K. Agaram <vc@akkartik.com>2016-10-07 13:55:47 -0700
commitd3d301766f1ac7c600151becdae42e822c781142 (patch)
tree28b7f22f8ad67fe1f4e21b2f24ba8e0938d8ac91 /091socket.cc
parent347510c0a2d8820e2ad5450dd34d03e2e5d073a1 (diff)
downloadmu-d3d301766f1ac7c600151becdae42e822c781142.tar.gz
3471
Diffstat (limited to '091socket.cc')
-rw-r--r--091socket.cc27
1 files changed, 17 insertions, 10 deletions
diff --git a/091socket.cc b/091socket.cc
index 22000c16..a6f0bc6a 100644
--- a/091socket.cc
+++ b/091socket.cc
@@ -97,20 +97,27 @@ case _ACCEPT: {
 }
 :(before "End Primitive Recipe Implementations")
 case _ACCEPT: {
-  long long int x = static_cast<long long int>(ingredients.at(0).at(0));
-  socket_t* socket = reinterpret_cast<socket_t*>(x);
-  socket_t* session = new socket_t();
-  session_socket(socket->fd, session);
   products.resize(2);
-  long long int result = reinterpret_cast<long long int>(session);
-  products.at(0).push_back(static_cast<double>(result));
-  products.at(1).push_back(ingredients.at(0).at(0));
+  products.at(1).push_back(ingredients.at(0).at(0));  // indicate it modifies its ingredient
+  long long int x = static_cast<long long int>(ingredients.at(0).at(0));
+  socket_t* server = reinterpret_cast<socket_t*>(x);
+  if (server) {
+    socket_t* session = accept(server);
+    long long int result = reinterpret_cast<long long int>(session);
+    products.at(0).push_back(static_cast<double>(result));
+  }
+  else {
+    products.at(0).push_back(0);
+  }
   break;
 }
 :(code)
-void session_socket(int serverfd, socket_t* session) {
-  socklen_t dummy = sizeof(session->addr);
-  session->fd = accept(serverfd, (struct sockaddr*)&session->addr, &dummy);
+socket_t* accept(socket_t* server) {
+  if (server->fd == 0) return NULL;
+  socket_t* result = new socket_t;
+  socklen_t dummy = sizeof(result->addr);
+  result->fd = accept(server->fd, (struct sockaddr*)&result->addr, &dummy);
+  return result;
 }
 
 :(before "End Primitive Recipe Declarations")
0800 committer Kartik Agaram <vc@akkartik.com> 2018-11-30 16:45:15 -0800 4808 - clean up comments in all subx files' href='/akkartik/mu/commit/subx/examples/ex10.subx?h=main&id=9d27e966b5e9bf1bd3da48f49d7e133d112a2bbe'>9d27e966 ^
6030d7e2 ^
ee9a9237 ^
6030d7e2 ^
9d27e966 ^
6030d7e2 ^


ddeed58f ^


03d50cc8 ^
6030d7e2 ^



03d50cc8 ^
ddeed58f ^
6030d7e2 ^



ddeed58f ^
6030d7e2 ^

ddeed58f ^
6030d7e2 ^

ddeed58f ^
6030d7e2 ^



03d50cc8 ^
6030d7e2 ^


03d50cc8 ^
6030d7e2 ^


03d50cc8 ^
6030d7e2 ^

ed0e64a9 ^
ee9a9237 ^
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71