【问题标题】:Network error on PASE on iSeries machineiSeries 机器上的 PASE 网络错误
【发布时间】:2011-08-27 03:20:00
【问题描述】:

我正在运行一个服务器程序,它是用 C 编写的,在 iSeries 机器上运行在 PASE 上。 PASE(便携式 AIX 解决方案环境)是在 IBM iSeries 机器上模拟 AIX。

Server 程序是一个面向连接的迭代 tcp 服务器。

服务器逻辑包含对 accept() 的调用,它返回一个套接字描述符。 随后调用 ioctl() 以使用 F_IONBIO 设置套接字非阻塞。

对 ioctl 的调用间歇性失败,返回 -1 且 errno = 9 (EBADF : bad file descriptor) , 大约 0.8% 的调用次数。一旦针对特定的套接字描述符失败, 下一次失败总是针对相同的套接字描述符和相同的 errno。

发生这种情况时,客户端失败,errno = 73,即对等方重置连接。

服务器是一个守护进程;所以 stdin 在初始化时关闭,并且在 accept() 上可用。 最初我观察到套接字描述符 0 的 ioctl() 失败,但并非总是如此。 因此,我试图通过将 stdin 设置为“/dev/null”来防止套接字描述符 0 的重用,以防出现问题。 但我不确定这是否是主要问题。还没有得到这个改变后的测试结果。

仅在某些机器上观察到此问题,并且通常在机器加载时出现。所以这似乎是某种竞争条件。 服务器逻辑经过良好测试,似乎很稳定。

在 PASE 或 AIX 平台上是否观察到任何与套接字相关的问题?这可能与操作系统有关吗?

任何有关此问题的帮助/指针将不胜感激。

提前致谢,

平均

【问题讨论】:

    标签: sockets network-programming ibm-midrange


    【解决方案1】:

    您是否有可能遇到每个作业默认最多 200 个文件描述符的情况?

    如果是这样,您可以使用DosSetRelMaxFH()--Change Maximum Number of File Descriptors API 来增加限制。

    如果这不是问题,我建议收集并检查错误的 SST 通信跟踪。请参阅TCP/IP Communications Trace Instructions 了解更多信息。

    接下来我会检查组 PTF 级别,尤其是 SF99315 TCP/IP Group PTF

    IBM 支持非常有助于跟踪此类问题。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-10
    • 1970-01-01
    • 1970-01-01
    • 2019-06-19
    • 2017-03-20
    • 2014-09-18
    相关资源
    最近更新 更多