【问题标题】:Are sockets allowed to be global in C?套接字是否允许在 C 中是全局的?
【发布时间】:2018-10-15 13:05:34
【问题描述】:

我正在制作一个程序,该程序不断检查通过套接字接收和发送数据,并且我已经全局声明了套接字,它在 2 个线程函数中使用。我在 main() 中设置了套接字,一个线程使用套接字使用 recvfrom 并且工作正常,但是每当我尝试调用 sendto 时,它都会返回一个值

【问题讨论】:

  • 错误是什么?检查errno。可能是EMSGSIZE?
  • 不确定你的问题的标题,但总的来说是的。
  • 套接字可以是全局的,但是在两个不同的线程中使用同一个套接字可能是个坏主意。
  • @user3386109:一个线程发送另一个线程接收应该没有问题。
  • 无论哪种方式,我想我们都需要先查看 OP 的代码才能解决此问题。更多信息请访问minimal reproducible example

标签: c sockets global-variables sendto recvfrom


【解决方案1】:

套接字只是一类文件描述符,在 C 中由 int 值表示。这里重要的是您为套接字存储的(当您第一次调用socket(2) 时会填充该值,并且在您使用close(2) 在内核中释放它之前不会更改)。作为系统提供的值,它会一直保留到您使用close(2) 释放它或进程终止(以任何方式)。您存储该值的位置(全局、静态或自动变量)并不介意。

所以最后答案是是的

【讨论】:

    【解决方案2】:

    在 C 中允许套接字是全局的吗?

    是的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-10
      • 2021-11-24
      • 1970-01-01
      • 2020-12-17
      • 2018-05-22
      • 2010-11-21
      • 1970-01-01
      相关资源
      最近更新 更多