2

accept()関数をインターセプトするLD_PRELOADを作成しました。時々accept関数が同じファイル記述子を与えるので、私は問題を抱えています。このプリロードを1つのプロセスに対してのみロードします

私のコード:

int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen)
{
 int fd;
 fd = (*realAccept)(sockfd, addr, addrlen);
 if(fd >= 0)
 {
  printf("file descriptor: %d\n", fd);
  ...
  return fd;
 }
}

int close(int fd)
{
 printf("close decriptor: %d\n", fd);
 return (*realClose)(fd);
}

出力は次のとおりです。

ファイル記述子:213

ファイル記述子:213 <-なぜですか?

..。

記述子を閉じる:213

なぜaccept関数は同じファイル記述子を返すのですか?

ありがとう!

4

1 に答える 1

0

のバッファリングによるエラーだと思いますstdout。他のスレッドがそれを使用している可能性があります...エンディングを含めなかったという事実に加えて\n、出力で行が重複する可能性があります。

確実にしたい場合\nは、文字列の最後に を追加し、 をfflush(stdout)呼び出すたびに を追加しprintf()ます。

于 2012-07-09T10:36:00.430 に答える