accept() 함수를 가로 채는 LD_PRELOAD를 작성했습니다. 가끔 함수를 받아 들일 때 나에게 같은 파일 기술자를주기 때문에 나는 문제가있다. 나는 단지 하나 개의 프로세스Linux에서 accept 할 때 동일한 SOCKET id입니까?
이 프리로드를로드내 코드 :
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 < - 왜?
...
가까운 decriptor : 213
왜 기능은 동일한 파일 기술자를 반환 받아?
감사합니다.
아마도 연결을 수락 한 후 accept 함수를 사용하여 다른 정보를 인쇄 할 수 있습니다. 프로세스의 pid 및 그 pid에 대한'lsof -p % u'의 출력. 'system' 호출은 후자를 달성 할 수 있습니다. – MvG
이 사전로드를 하나의 프로세스에만로드하십시오. – Robert
프로세스가'fork() '를 호출하지 않았습니까? – rodrigo