0
解決しよう:変更C ==受け入れる(...はCに=受け入れる(...は 一つ==が不適切に使用されたときに警告を表示するには-Wallを使用する必要がありますなぜrsyslogのログ同じログを複数回
私はsyslogの接続口
openlog("program", LOG_PID, LOG_USER);
Serverコード設定:その後、私はtelnetの
01を使用してconenctfor (;;) {
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 localhost 2345
...
Connection closed by foreign host.
ログイン/var/log/user.logは私は一度だけのtelnetと呼ばれることを知っているが、そのrsyslogのは、ランダムな順序でメッセージを複数回、 をログに記録のように見えます
...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が複数回ログに記録された理由を理解できません。
「バグ」を修正する方法を教えてください。
if ((c == accept(s, (struct sockaddr *)&sa, &b)) == -1) {
c
は決して同じ-1
: