gpt4 book ai didi

sockets - 我应该如何关闭信号处理程序中的套接字?

转载 作者:行者123 更新时间:2023-12-04 05:22:20 26 4
gpt4 key购买 nike

我正在编写一个非常简单的服务器,该服务器将一直循环直到按Ctrl-C为止。我想让ctrl-c的信号处理程序关闭打开的套接字并关闭服务器,但是我不知道信号处理程序的范围是什么,而且我不喜欢声明套接字的想法(s)我需要接近全局化。

有人可以提供建议吗?有一些标准的方法可以做到这一点吗?

最佳答案

好吧,由于您具有信号处理程序,因此我假设您使用的是Unix变体。如果是这样的话:

  • 一个套接字通过文件号(它是一个int)标识到内核。参见socket(2)
  • 该int对您的进程有效
  • 该int对创建它后的所有分支有效
  • 如果不是close-on-exec,则对您执行的任何进程均有效。

  • 因此,这在您的信号处理程序中是完全有效的。如何使信号处理程序知道要使用哪个数字,取决于您所使用的语言(未指定语言)。有两种方法几乎可以在任何语言中使用
  • 如果除了close并没有其他任何清除操作,然后退出,只需调用exit。或将信号 Action 设置为默认值,即退出。内核将关闭套接字。
  • 设置一个标志(通常将是某种全局变量)来告诉您的select/poll循环进行清理并退出。优点在于您不必担心程序的各个部分是否可以安全地从信号处理程序调用。
  • 关于sockets - 我应该如何关闭信号处理程序中的套接字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/449617/

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