[질문]perl 에서 소켓프로그래밍시에..

redglim의 이미지

펄에서 소켓 프로그래밍을 해볼까 했는데,
초보라 처음부터 막히네요..
일단 메인 쓰레드에서 다음과 같이 accept 를 하고,
socket descriptor 를 배열에 저장 한 후에, 자식 쓰레드를 깨우고,

$client_address = accept(CLIENT, SERVER);
$client_fd[$iput] = fileno(CLIENT); 

자식 쓰레드에서는 다음과 같이, 부모가 저장해 둔 socket descriptor
를 받아와서 select 후 처리 하려고 합니다.

$connfd = $client_fd[$iget];
$readin = $excepin = "";
vec($readin, $connfd, 1) = 1;
$excepin = $readin;
$nfound = select($rout=$readin, undef, $eout=$excepin, $timeout);

그런데 select 후에 recv 를 하려고 하니
recv 함수 는 socket descriptor 가 아닌 handler 자체를 넘겨주어야 하는 것 같더군요..
이럴 경우 어찌 해야 할지..
fileno 가 handler 에서 descriptor 를 뽑아내듯이 그 반대(?) 함수도 있는지요.. 혹은 handler 자체를 부모가 저장해 두려면 어떤 방식으로 해야 할지요..
단순히 스칼라 변수에 저장해서는 안 되는 것 같더군요..
답변 부탁드립니다..

moonzoo의 이미지

perl은 잘 모르겠으나..

언듯 소스를 보니 c 기반인 듯하여 말씀드리자면..

c에서는

fileno 와 대칭 되는 개념으로

fdopen 이 있습니다.

근데 recv에는 socket descriptor가 들어가는게 맞지 않나여?