[ CnUnix ] in KIDS 글 쓴 이(By): zeo (ZeoDtr) 날 짜 (Date): 2005년 11월 8일 화요일 오후 04시 56분 07초 제 목(Title): Re: async vs non-blocking >예컨대 100바이트를 네트워크로 보내는 io를 요청했을 경우, >블러킹 io는 100바이트를 다 버퍼에 쓸때까지 기다렸다가 리턴하고, (버퍼가 >모자랄 경우 네트워크에 버퍼 내용이 흘러나가서 버퍼가 빌때까지 기다림) 아닙니다. 한 바이트만이라도 쓸때까지만 기다렸다가 리턴하죠. (즉, 한 바이트도 못 쓰는 경우에만 기다린다는 것.) 버퍼에 다 쓸때까지 기다린다는 보장은 없습니다. Windows 계열은 버퍼에 다 쓸때까지 기다리는 모양입니다만(그래서 너무 큰 걸 쓰면 버퍼 꽉찼다는 오류가...=_=), 그게 공식적인 socket spec은 아니죠. 읽어들일 때는 당연히 한 바이트만 읽어도 리턴하구요. 수많은 네트워크 프로그래머들이 이걸 잘 인지하지 못해서 간단히 테스트할 때는 멀쩡하다 정작 릴리즈해서 부하가 올라가면 꼬이는 바람에 막판에 밤을 새곤 한다는...=_=; non-blocking과 비동기 io 구별에 대한 건 명확하게 잘 쓰셨군요. 저도 도움이 된 것 같습니다.+_+ ZZZZZ "Why are they trying to kill me?" zZ eeee ooo "Because they don't know you are already dead." zZ Eeee O O ZZZZZ Eeee OOO - Devil Doll, 'The Girl Who Was...Death' |