我有一个用Ada编写的程序(尽管为此,我对任何解决方案都感兴趣)。它有一个没有sigkill就不会关闭的任务(该程序处理SIGUSR1),因为它正在等待创建的服务器套接字。 SIGUSR1可以正确处理,但是除非将某些内容输入套接字,否则此任务不会终止,然后它可以检查关闭状态并正常关闭。但是我想这样做而不必在套接字上填充数据。如果有人知道这样做的好方法,那就太好了。到目前为止,不建议使用诸如超时和重新打开套接字之类的方法,因为这可能会干扰套接字的使用。
答案 0 :(得分:4)
我假设您正在使用GNAT Ada编译器,并且在使用该编译器时,有一个名为GNAT.Sockets的特定于编译器的软件包,这是用于套接字的跨平台API。为了能够很好地关闭应用程序,此软件包的预期用途是使用GNAT.Sockets.Check_Selector过程。套接字读取器任务使用Check_Selector来知道是否有要在调用Receive_Socket之前从套接字读取的数据。另一个任务可以通过调用Abort_Selector中止套接字读取器任务的阻塞调用Check_Selector。我希望这会为您指明正确的方向。