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-22 16:56:07 -0700
committerKartik K. Agaram <vc@akkartik.com>2016-10-22 16:56:07 -0700
commit9a81d7460fdb16f4e77712e5381d9db8781f5ae6 (patch)
tree43b05169535fe33e65ecbf61f3fb3ada5f75ed52 /091socket.cc
parent22f4b76344b2d639cbfcaad56ed681670d436548 (diff)
downloadmu-9a81d7460fdb16f4e77712e5381d9db8781f5ae6.tar.gz
3561
Diffstat (limited to '091socket.cc')
-rw-r--r--091socket.cc8
1 files changed, 6 insertions, 2 deletions
diff --git a/091socket.cc b/091socket.cc
index 74626853..bd3f4ed6 100644
--- a/091socket.cc
+++ b/091socket.cc
@@ -218,6 +218,7 @@ case _READ_FROM_SOCKET: {
 }
 :(before "End Primitive Recipe Implementations")
 case _READ_FROM_SOCKET: {
+  cerr << "$read-from-socket\n";
   long long int x = static_cast<long long int>(ingredients.at(0).at(0));
   socket_t* socket = reinterpret_cast<socket_t*>(x);
   // 1. we'd like to simply read() from the socket
@@ -227,19 +228,22 @@ case _READ_FROM_SOCKET: {
   // 3. but poll() will block on EOF, so only use poll() on the very first
   // $read-from-socket on a socket
   if (!socket->polled) {
-    socket->polled = true;
     pollfd p;
     bzero(&p, sizeof(p));
     p.fd = socket->fd;
     p.events = POLLIN | POLLHUP;
-    if (poll(&p, /*num pollfds*/1, /*no timeout*/-1) <= 0) {
+    if (poll(&p, /*num pollfds*/1, /*timeout*/100/*ms*/) <= 0) {
       raise << maybe(current_recipe_name()) << "error in $read-from-socket\n" << end();
       products.resize(2);
       products.at(0).push_back(0);
       products.at(1).push_back(false);
       break;
     }
+    cerr << "poll output: " << p.revents << '\n';
+    cerr << "setting socket->polled\n";
+    socket->polled = true;
   }
+  cerr << "$read-from-socket " << x << " continuing\n";
   int bytes = static_cast<int>(ingredients.at(1).at(0));
   char* contents = new char[bytes];
   bzero(contents, bytes);