我写了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函数返回相同的文件描述符?
谢谢!
答案 0 :(得分:0)
我敢打赌,由于stdout
的缓冲,这是一个错误。也许有一些其他线程使用它...这增加了一个事实,即你没有包含结尾\n
可能导致输出中的重复行。
如果您想确定,请在字符串末尾添加\n
,并在每次调用fflush(stdout)
后添加printf()
。