【问题标题】:how to pass socket control to child process?如何将套接字控制传递给子进程?
【发布时间】:2013-05-09 13:52:56
【问题描述】:

我编写了一个小型代理服务器,它监听 25 端口并执行一些操作。

在安全 SMTP 的情况下,我派生一个进程并让子进程接管此会话。

思考的过程是这个子进程应该是满足特定客户请求的那个。如果有另一个客户端发送邮件(安全),那么我需要分叉另一个进程。

但是发生的事情是,一旦子进程处理了客户端的请求,它就会继续监听,但不会迎合这个客户端。父进程已经在监听这个socket,所以每次都fork一个新进程。

我该如何处理这种情况?如果已经为客户端(IP 地址)分叉了进程,则不应发生新的分叉。现有的子进程应该处理这些请求。

该程序基于 C 语言并在 linux 上运行。

【问题讨论】:

    标签: c linux client-server fork inter-process-communicat


    【解决方案1】:

    在客户端进程中保留发送者的信息。当您收到新的 SMTP 邮件时,请检查发件人是否与以前相同。如果是,请不要分叉给新客户端。

    如果这不能回答您的问题,请包含代码的基本部分,以便我们查看逻辑错误可能存在的位置。

    【讨论】:

    • 检查发件人是否相同的部分由父进程完成。 rt?如果它和以前一样,那么我需要将请求转发给子进程。该怎么做?
    • @chingupt:关于如何将文件/套接字描述符从一个进程传递到另一个进程,您可能想阅读以下内容:stackoverflow.com/a/2358843/694576 和/或此stackoverflow.com/a/1997642/694576
    猜你喜欢
    • 2013-01-03
    • 2017-03-18
    • 2022-01-15
    • 1970-01-01
    • 1970-01-01
    • 2013-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多