좀 더 명확히 하자면 production level code 101 이라고 해야겠지만.[1]
얼마 전에 세번째 항목이 고려되지 않은 코드를 봐야했는데(…), 참 보고있기 괴로웠다.
recv를 하면 크게 세 가지 경우가 나온다
길이의 가정을 하지 말아야하는 이유가 여기서도 마지막 항목 때문. 응용 프로그램에서 사용하는 메시지 길이가 짧다고 — 특히나 path MTU보다 작다고 — 그 메시지가 한꺼번에 올 수 있는 것은 아니다. Path MTU가 1000 bytes 메시지가 300 bytes 고라고 해도 메시지 4개가 사이좋게 뭉쳐서 오면(…), 4번째 메시지는 100 bytes만 버퍼에 남게 된다.
결국 최소한으로 잡아도 이런 메시지 처리 코드가 나오게 된다.
이렇게 하면 위에서 설명한 세 가지 경우가 대부분[5] 처리 된다.
결론적으로 말하면,
TCP가 보장하는 부분은 매우 적다. TCP 세그먼트를 받아서 필요한 크기로 재조립할 생각을 하자
ps. 101 이긴 하지만 좀 추상적인 내용이다. 그래도 이게 네트웍 프로그래밍으로 toy program이 아닌 물건을 만드려면 필요한 “최소한”의 지식이라고 생각해서 끄적여본다.
설마, 3번을 고려하지 않고 네트웍 프로그램을 짜는 프로그래머가 있을거라는 생각은 잘… (책의 단순 소켓 예제 프로그램이라면 몰라도)
Written by 오스카 on March 27, 2008 at 11:54pm
네 그런걸 얼마전에 한 건 봤습니다. 최종 프로덕트라기보단 프로토타입에 가까운 물건이었지만 좀 무서웠죠 -,-
Written by rein on March 28, 2008 at 12:34am
네트워크 숙제에선 신경을 안 써도 잘 돌죠. 크크크
(저는 초수강 때는 TCP를 너무 믿었다가, 재수강 때 다시 구현했죠 …)
Written by 피앙 on March 28, 2008 at 10:39am
Jump to comments