gpt4 book ai didi

sockets - 如何使用 gnat.sockets.Receive_Socket 检测套接字读取超时?

转载 作者:行者123 更新时间:2023-12-03 11:52:12 27 4
gpt4 key购买 nike

我正在使用 Gnat Sockets包。
我有一个使用以下内容创建和初始化的服务器端套接字:

   GNAT.Sockets.Create_Socket(...);

...
   GNAT.Sockets.Set_Socket_Option
(Socket => Server,
Option => (Name => GNAT.Sockets.Receive_Timeout,
Timeout => Listner_Timeout));

...
   GNAT.Sockets.Listen_Socket(...);
GNAT.Sockets.Accept_Socket(...);

到目前为止一切都很好,但是什么时候使用:
   GNAT.Sockets.Receive_Socket(...);

我不知道如何检测我的套接字是否超时,或者在返回时读取一些数据。
我是否需要使用 Check_Selector方法(这种用法似乎有点繁重,如果是这样,这是否与 Set_Socket_Option 调用中设置的超时交互)?

谢谢,

最佳答案

在任何情况下,Check_Selector 上的 Timeout 参数都能满足您的需求。您调用 Check_Selector(),并在它返回时查看状态。如果 Status 为 Complete,则您已经获得了“事件”,例如数据(假设您正在阅读)或套接字的另一端关闭,如果 Expired 选择器超时,如果 Aborted 则选择器被命令提前终止通过 Abort_Selector()。

我通常将套接字读取(包括 Check_Selector() 调用)放在一个任务中,以免阻塞应用程序的其余部分,并允许外部启动的 Abort_Selector。实际上,我很少使用超时,我只是在套接字上循环检查/读取,当我不再需要读取套接字时,例如关闭时,只需调用 Abort_Selector() 即可完成它。

关于sockets - 如何使用 gnat.sockets.Receive_Socket 检测套接字读取超时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17603978/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com