Socket API read() hooking해서 읽은 데이터를 수정 했을 때
글쓴이: mandugukbap / 작성시간: 토, 2013/04/27 - 12:16오전
socket API의 read()를 후킹해서 대략 아래처럼 처리 하였습니다.
원래의 read(3)를 orginal_read(3)로 포인터 변경하였고, read(3)을 아래처럼 새로 썼습니다.
ssize_t read(int fd, char* buf, ssize_t count) { ssize_t cnt1 = original_read(fd, buf, count); // 아래의 change_buf 함수는 buf에 저장된 데이터를 cnt2 크기로 줄입니다. ssize_t cnt2 = compress_buf(buf, cnt1); return cnt2; }
프로그램 하나를 테스트 했는데, original_read()가 120바이트를 읽어서 compress_buf()로 압축한 100바이트를 반환 했더니, 중간에 계속 블로킹된 상태로 멈추어 버리더군요.
이건 read()가 20바이트를 더 읽을 때까지 블로킹 하는 걸까요? 만약 그런거라면 어플리케이션에 그냥 100바이트만 받은 척 하고 보내는 방법은 없을까요?
꼭 답변 부탁 드리겠습니다.
Forums:
refresh
refresh
댓글 달기