How to recursively accept data from Python server ?
Utk
bhiogade20 at gmail.com
Fri Jun 25 02:55:50 UTC 2021
Hello!
I'm trying to establish a connection between a python server and
a d client. The data is been transferred properly only once and
then the d client doesn't wait for any further data and returns
an error ```Socket.ERROR``` and exists and doesn't wait for
further incoming data from the Python server. From Python, the
data is been sent whenever the user sends a request but instead
of waiting for incoming requests the D client just accepts the
data 1st time and then throws an error and exits.
The code snippet is as below:
```
bool get_req_from_socket(Socket socket) {
ubyte[] rawTrHeader;
ubyte[] buffer;
writeln("Waiting for data from socket");
while (rawTrHeader.length < 16) {
import std.string: format;
buffer.length = 16 - rawTrHeader.length;
auto ret = socket.receive(buffer);
uvm_info("SOCKET", format("Received %d bytes from socket",
ret),
UVM_DEBUG);
if (ret == Socket.ERROR)
uvm_fatal("SOCKET", "Error receiving data from socket");
if (ret == 0)
uvm_fatal("SOCKET", "Got insufficient bytes for TrHeader");
// now slice the buffer to get the part...
rawTrHeader ~= buffer[0 .. ret];
}
...
...
}
```
This is the function (infinitely called while it returns
```true```) that accepts the data and returns ```true``` or
```false``` depending on if data is received or not respectively.
The error I'm receiving is:
```
Waiting for data from socket
UVM_INFO ../testbench/apb.d(375) @ 130000: reporter@@apb_seq
[SOCKET] Received -1 bytes from socket
UVM_FATAL ../testbench/apb.d(378) @ 130000: reporter@@apb_seq
[SOCKET] Error receiving data from socket
```
Please help me to resolve this issue.
More information about the Digitalmars-d-learn
mailing list