solaris 상에서 select()와 ioctl

익명 사용자의 이미지


서버에 접속하는 클라이언트 프로그램을 만들고 있습니다
(솔라리스 8, 스팍)

접속을 한 후에 select를 이용해서 데이터를 주고 받고 있습니다.

connect()

while (1)
{
select()
if (FD_ISSET(svrfd, &test_readfds))
if (FD_ISSET(svrfd, &test_writefds))
}

select를 실행한 후에 리턴값을 2를 받았습니다.
(보통 write fds는 set 되고 - 이때는 1, 2라는 것은 read fds가 set
됐습니다.)

if (FD_ISSET(svrfd, &test_readfds))
{
if (ioctl(svrfd, FIONREAD, &read_counter) < 0)
}

이 부분에서 ioctl 이 에러를 냅니다. (값이 -1)

에러를 내는 타이밍은 종종 변하더군요.
접속 후 바로 낼 때고 있고, 데이터를 한두개 던지고 받고 한 후에
낼때도 있습니다.

리눅스에서는 이상없이 썼던 것인데 썬스팍에서 말썽이군요.

고수분들의 조언 바랍니다.

감사합니다.