다중스레드 소켓 처리에 대한 질문입니다.

maze의 이미지

accept 하는 스레드가 하나 있고, 그 스레드에서 accept로 받은 fd를
다른 스레드로 넘깁니다. 그 다른 스레드가 처리를 끝내고 해당 fd를
닫게 되는데요.. 이와같이 accept 해주는 스레드가 있고, 그 fd를 close하는
스레드가 따로 동작하고있다면, 어떤 문제가 발생할수 있을런지요..?
fd close 시에 간혹 fail 발생하여서 문의드립니다.
close fail 시의 fd도 출력해보았습니다만.. 정상적인 fd 범위였구요.
답변 부탁드릴게요..

소타의 이미지

문제 없어야 정상입니다. 쓰레드로 잘 넘겼다면 말이죠.
혹시 accept 한 fd(int)를 그대로 & 붙여서 넘기신게 아닌가 싶네요.
이렇게 할 경우 2개의 클라이언트가 빠르게(쓰레드들이 미처 초기화 되기 전에) accept 된 경우 먼저 들어온 fd는 아무 쓰레드를 할당받지 못하고 두번째 들어온 fd에 쓰레드가 2개 할당되는 일이 생길 수 있습니다. 구현에 따라 그렇게 될 수 있습니다.
이게 아니라면 valgrind로 메모리 침범이 있는지 보셔야 할 것 같습니다

nthroot의 이미지

close 시에 fail은 이미 누가 닫았다고 보여지네요.

------식은이 처------
길이 끝나는 저기엔 아무 것도 없어요. 희망이고 나발이고 아무 것도 없어.