send를 cancel 시킬 수 있을까요..
글쓴이: psjcap / 작성시간: 월, 2004/04/12 - 2:33오후
send하는 도중에 어떤 이벤트가 발생하면..
close를 해야합니다..
send와 close가 동시에 일어나지 않도록 lock처릴 하면 되긴 하지만..
send가 장시간 블록되는 경우에..
close또한 장시간 블록되어 버립니다..
이것을 막기 위한 방법이 없을까요..??
send를 cancel시키고.. close를 시킴 좋겠지만..
이런 방법은 들어 본 적이 없어서..ㅠㅠ
그럼 읽어 주셔서 감사합니다....^^"
Forums:
send 가 블러킹되는 경우를 제거하는 몇가지 기법으로 제거하는 것이 어
send 가 블러킹되는 경우를 제거하는 몇가지 기법으로 제거하는 것이 어떨까요?
블록킹을 막는 기법이란게..
블록킹을 막는 방법은 제가 아는 것이라고는..
1. nonblocking socket으로 한다..
2. select로 send전에 검사한다..
위에 두개 말고 더 있나요..??
2번 관련해서 추가 질문인데요..
select할 때.. send할 사이즈가 없잖아요..
근데 만약에 큰 size를 send해 버리면 어떻게 되나요..??
block 되지 않나요..??
그럼 감사합니다..^^"
넌블러킹 쓰기 동작은 소켓 버퍼에 최대한 쓰기를 하고 쓴 만큼의 길이를
넌블러킹 쓰기 동작은 소켓 버퍼에 최대한 쓰기를 하고 쓴 만큼의 길이를 리턴해줍니다.
select 류의 fd의 준비 가능 여부 판단 함수로 쓰기 가능을 판단하는 것과 쓰기 버퍼가 얼마가 남았는지를 바로 알아내려고 한다면 SO_SNDLOWAT 정도를 이용하시면 될 것 같구요.
만약 kqueue라면, 쓰기 가능 여부 판단이 돌아올 때, 내부 구조체에 해당 값이 같이 와서 편하긴 합니다...
그런데, 얼마나 많은 데이터를 한번의 쓰기로 전송하길래 쓰기 동작이 블럭되는 것을 고민하시는지요?
적당한 크기로 나눠서 넌블러킹 쓰기로 보내다가 못보내면 다시 보내고 하다가... 그러다가 죽어라... 그러면 죽는 코드를 중간에 넣으면 되지 않을까 합니다만...
댓글 달기