Skip to content

Commit 37c53a5

Browse files
committed
Switch handshake protocol
- have server (the one that bind) send first greeting message
1 parent 10f2c61 commit 37c53a5

2 files changed

Lines changed: 30 additions & 18 deletions

File tree

CP5/active_plugins/cpforeign/zmq_server.ipynb

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -55,12 +55,13 @@
5555
"outputs": [],
5656
"source": [
5757
"# handshake\n",
58-
"hello = socket.recv_string()\n",
59-
"if hello == HELLO:\n",
60-
" print('Received connection:', hello)\n",
61-
" socket.send_string(ACK)\n",
58+
"socket.send_string(HELLO)\n",
59+
"print(\"Sent hello, waiting for acknowledgement...\")\n",
60+
"ack = socket.recv_string()\n",
61+
"if ack == ACK:\n",
62+
" print('Received connection ack:', ack)\n",
6263
"else:\n",
63-
" print(\"Received unkown message\", hello)"
64+
" print(\"Received unkown message\", ack)"
6465
]
6566
},
6667
{

CP5/active_plugins/runforeignnb.py

Lines changed: 24 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -112,29 +112,34 @@ def run(self, workspace):
112112
workspace.display_data.dimensions = dimensions
113113

114114
def do_server_handshake(self):
115+
def cleanup():
116+
LOGGER.debug("destroying existing context")
117+
if self.server_socket:
118+
self.server_socket.close()
119+
self.server_socket = None
120+
if self.context:
121+
self.context.term()
122+
self.context.destroy()
123+
115124
port = str(self.server_port.value)
116125
domain = "localhost"
117126
socket_addr = f"tcp://{domain}:{port}"
118127

119128
if self.context:
120-
LOGGER.debug("destroying existing context")
121-
self.context.destroy()
122-
self.server_socket = None
129+
cleanup()
123130

124131
self.context = zmq.Context()
125132
self.server_socket = self.context.socket(zmq.PAIR)
126133
self.server_socket.copy_threshold = 0
127-
134+
128135
LOGGER.debug(f"connecting to {socket_addr}")
129136

130137
c = self.server_socket.connect(socket_addr)
131-
138+
132139
LOGGER.debug(f"setup socket at {c}")
133-
134-
LOGGER.debug("sending handshake, waiting for acknowledgement")
135140

136-
self.server_socket.send_string(HELLO)
137-
141+
LOGGER.debug("receiving handshake, waiting for acknowledgement")
142+
138143
poller = zmq.Poller()
139144
poller.register(self.server_socket, zmq.POLLIN)
140145
while True:
@@ -143,14 +148,20 @@ def do_server_handshake(self):
143148
break
144149
else:
145150
LOGGER.debug("handshake timeout")
151+
cleanup()
146152
return
147153

148-
response = self.server_socket.recv_string()
154+
hello = self.server_socket.recv_string()
149155

150-
if response == ACK:
151-
LOGGER.debug(f"received correct response {response}")
156+
if hello == HELLO:
157+
LOGGER.debug(f"received correct greeting {hello}")
152158
else:
153-
LOGGER.debug(f"received unexpected response {response}")
159+
LOGGER.debug(f"received unexpected greeting {hello}")
160+
161+
LOGGER.debug("acknowledging handshake")
162+
163+
self.server_socket.send_string(ACK)
164+
154165

155166
def do_server_execute(self, im_data):
156167
dummy_data = lambda: np.array([[]])

0 commit comments

Comments
 (0)