在linux上接受时,相同的SOCKET ID?

时间:2012-07-09 09:51:11

标签: c++ linux intercept ld-preload

我写了LD_PRELOAD,它拦截了accept()函数。我有一个问题,因为有时接受函数给我相同的文件描述符。我只为一个进程加载此预加载

我的代码:

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< - 为什么?

     

...

     

close decriptor:213

为什么accept函数返回相同的文件描述符?

谢谢!

1 个答案:

答案 0 :(得分:0)

我敢打赌,由于stdout的缓冲,这是一个错误。也许有一些其他线程使用它...这增加了一个事实,即你没有包含结尾\n可能导致输出中的重复行。

如果您想确定,请在字符串末尾添加\n,并在每次调用fflush(stdout)后添加printf()