【问题标题】:How to ensure a posix c socket is still valid如何确保 posix c 套接字仍然有效
【发布时间】:2018-03-05 08:50:27
【问题描述】:

我正在使用嵌入式 linux 内核 2.6 设备,需要知道以前建立的套接字是否仍然有效,而且我不能使用通常的发送函数执行此操作并检查返回值,因为如果我发送到无效的套接字描述符,我的应用程序将崩溃,Linux 将关闭我的进程。还有其他功能/建议吗?

编辑: 设备中有一个安装的应用程序管理器,当我尝试发送到未引用打开套接字的套接字描述符时,应用程序管理器将结束我的应用程序,然后如果我关闭套接字连接并尝试写入它,我的应用程序将被较低级别的应用程序管理器关闭。另外我正在使用 TCP 套接字,WBr。

【问题讨论】:

  • 你说的仍然有效是什么意思?另外,您指的是哪种插座?本地、TCP 还是 UDP?请澄清您的问题
  • 另外,如果在无效的套接字上发送,为什么您的应用会崩溃?
  • 你的应用程序不会崩溃,除非你写了一些东西让它崩溃。
  • 请为您的问题使用换行符和正确的格式。当它看起来像一堵字母墙时,它非常难以阅读。
  • “如果我关闭一个套接字并尝试写入它”与“如果套接字的另一端已关闭”完全不同。如果你关闭 你的结束 套接字然后尝试写入(现在无效的)文件描述符,那是你的错 - 这是你的代码中的一个逻辑错误。不要这样做。

标签: c linux sockets posix


【解决方案1】:

我认为这个问题要么是错误陈述,要么是基于错误的前提。通过另一个进程/主机的操作,套接字可能会异步产生“无效”的感觉。最接近的可能是套接字的另一端被关闭,这不会使您的套接字无效,但它确实会导致后续写入您的套接字导致EPIPE 错误和SIGPIPE 信号如果没有被阻止。 SIGPIPE 默认情况下会终止您的进程。如果这是您的问题,避免它的最简单方法是使用 sigprocmask/pthread_sigmask 阻止 SIGPIPE,或者使用 signal(SIGPIPE, SIG_IGN) 忽略它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-15
    • 1970-01-01
    • 1970-01-01
    • 2018-06-10
    • 2013-04-13
    • 1970-01-01
    • 2016-08-05
    • 2010-12-28
    相关资源
    最近更新 更多