求 GNAT.SOCKETS TCP连接的多线程方法

with Gnat.Sockets;
use Gnat.Sockets;
with Ada.Text_Io;

procedure server is

type server_array is array(1..10)of socket_type;
Server : server_array;
type address_array is array(1..10)of sock_addr_type;
Serv_Address : address_array;
Cus_address:address_array;
type socket_array is array(1..10)of socket_type;
Serv_socket:socket_array;
Cus_socket:socket_array;
type channel_array is array(1..10)of stream_access;
Serv_channel:channel_array;

task type service is
entry start(c:integer);
end service;
task body service is

pragma warnings(off);
begin
accept start(c:integer) do
gnat.sockets.Initialize (Process_Blocking_Io => false);

Serv_address(c).addr:=inet_addr("127.0.0.1") ;

Serv_address(c).port:=port_type(799+c);

Cus_address(c).addr:=inet_addr("127.0.0.1") ;

Cus_address(c).port:=any_port;

create_socket(server(c));

Set_Socket_Option
(Server(c),
Socket_Level,
(Reuse_Address, true));

Bind_Socket (Server(c), Serv_Address(c));

Listen_Socket (Server(c));

Accept_Socket (Server(c), Serv_Socket(c), Cus_Address(c));

Serv_Channel(c) := Stream (Serv_Socket(c));

< --该处循环标记不能被正确显示
Ada.Text_Io.Put_Line(string'input(Serv_channel(c))) ;

string'output(Serv_channel(c),"Hello,have recevied your message!" & "channel" & integer'image(c) & " FEEDBACK");

delay 1.0;

goto loop_rec;

close_socket(server(c));

close_socket(Serv_socket(c));

end start;

end service;

type servers is array(1..10)of service;
thread_server:servers;

begin

for i in 1..10 loop

thread_server(i).start(i);

end loop;

end server;

以上的程序看起来是TASKING的,可实际上还是单线程的,SERVER一运行,只启动了C:=1时的实例.前面的实例

不退出的话后面的将不会启动 .请高手指点,3Q ,