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