【发布时间】:2017-03-11 18:21:25
【问题描述】:
已解决:将 c == accept(... 更改为 c = accept(... 当 == 使用不当时,应该使用 -Wall 来查看警告。
我配置 syslog 连接打开
openlog("program", LOG_PID, LOG_USER);
服务器代码:
for (;;) {
syslog(LOG_NOTICE, "before accept");
if ((c == accept(s, (struct sockaddr *)&sa, &b)) == -1) {
syslog(LOG_ERR, "could not accept on socket");
exit(1);
}
syslog(LOG_NOTICE, "after accept");
pid = fork();
if (pid < 0) {
syslog(LOG_ERR, "could not fork to handle client session");
exit(1);
} else if (0 == pid) {
close(s);
handle_client(c);
exit(0);
syslog(LOG_ERR, "exit after");
} else
close(c);
}
然后我使用 telnet 连接
telnet localhost 2345
...
Connection closed by foreign host.
日志/var/log/user.log显示
...some_info...: client was handled
...some_info...: client was handled
...some_info...: before accept
...some_info...: after accept
...some_info...: before accept
...some_info...: after accept
...some_info...: client was handled
看起来 rsyslog 以随机顺序多次记录消息, 虽然我知道我只调用过一次 telnet。 我清楚地了解程序是如何执行的,但不明白为什么 rsyslog 记录了多次。
您能否建议如何修复该“错误”?
【问题讨论】: