我有一个从套接字读取数据的通用库。请参阅问题末尾的代码清单。
当My_Type
是固定大小的类型时,这可以正常工作,但是尝试使用此代码读取变体记录会引发STORAGE ERROR
带有 message的 a object too large
。
我知道可以通过套接字发送变体记录,因为我有一个示例工作。我认为问题在于我将记录存储为泛型类型。无论变体记录是否具有默认判别式,都会引发异常。有没有办法在这种情况下存储变体记录?
reader_pkg.ads
with Sockets; use Sockets;
with Sockets.Stream_IO; use Sockets.Stream_IO;
generic
My_Type: private
package Reader_Pkg is
task type Receive_Task_Type is
entry Start(FD: Socket_FD);
end Receive_Task_Type;
end Reader_Pkg;
reader_pkg.adb
package body Reader_Pkg is
task body Receive_Task is
Recv_Socket: Socket_FD;
Recv_Stream: aliased Socket_Stream_Type;
begin
select
accept Start (FD : Socket_FD) do
Recv_Socket := FD;
Initialize (Recv_Stream, Recv_Socket);
declare
Message: My_Type := My_Type'Input(Recv_Stream'Access); -- STORAGE_ERROR raised here
begin
-- Message gets processed here
end;
end Start;
or
terminate;
end select;
end Receive_Task;
end Reader_Pkg;