Sockets iSeries计算机上的PASE出现网络错误

Sockets iSeries计算机上的PASE出现网络错误,sockets,network-programming,ibm-midrange,Sockets,Network Programming,Ibm Midrange,我正在运行一个服务器程序,用C编写,在iSeries机器上运行PASE。 PASE(Portable AIX Solutions Environment)是IBM iSeries机器上的AIX模拟 服务器程序是一个面向连接的迭代tcp服务器 服务器逻辑包含对accept()的调用,该调用返回套接字描述符。 然后调用ioctl()以使用F_IONBIO设置套接字非阻塞 对ioctl的调用间歇性失败,返回-1,errno=9(EBADF:bad file descriptor), 大约0.8%的调用

我正在运行一个服务器程序,用C编写,在iSeries机器上运行PASE。 PASE(Portable AIX Solutions Environment)是IBM iSeries机器上的AIX模拟

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

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

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

当这种情况发生时,客户端将失败,错误号为73,即对等端重置连接

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

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

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

对此问题的任何帮助/建议都将不胜感激

提前感谢,


平均值

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

如果是这样,您可以使用API来增加限制

如果这不是问题,我建议收集并检查错误的SST通信跟踪。有关更多信息,请参阅

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


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

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

如果是这样,您可以使用API来增加限制

如果这不是问题,我建议收集并检查错误的SST通信跟踪。有关更多信息,请参阅

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

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

次要注意事项——在PASE中。QShell的默认值是200。QShell默认值为200。