안녕하세요. 서버 소켓 프로그래밍에 대해 궁금한 점이 있습니다.
글쓴이: chaoty / 작성시간: 토, 2017/04/29 - 11:41오후
안녕하세요. 서버 프로그래밍을 하다가 잘 안 풀리는 문제가 있어서 여기에 질문드립니다.
제가 클라이언트에서 보낸 파일을 서버에 저장하는 프로그램을 만들고 있는데,
클라이언트에서 파일을 전송하다가 전송이 중단 될 때, 서버가 멈춰버립니다.
그래서 read나 write에 timeout을 설정하려고 하는데 setsockopt로 하는 설정은 먹히질 않고,
select를 이용한 timeout은 제가 서버에서 필요한 정보가 파일 개수, 파일 크기, 파일 데이터인데 그때마다
select에서 어떤 정보를 읽어드릴지 파싱하는게 좀 비효율적이라 생각해서 다른 방법을 찾고 있습니다. (게다가 클라이언트 하나하고 만 통신할려고 합니다.)
그래서 질문드리고 싶은 것은 서버에서 데이터를 받는 중에 blocking이 됐을 때 빠져나가는 방법이 어떤 것이 있는지 궁금합니다.
Forums:
제가 쓰는 방법입니다.
좋은 방법일지는 모르지만 일단 처음 데이터를 수신할 때에는 epoll을 이용하구요
그 이후 하나의 클라에서 연속된 데이터를 받아올 때에는 timeout이 있는 poll을 사용합니다.
select는 최대 fd번호(4096인가..?)를 초과하면 오작동하기 때문에 사용하지 않으시는게 좋습니다.
답변해주셔서 고맙습니다.
답변해주셔서 고맙습니다.
socket blocking
non-bloking 소켓 통신을 사용하면 됩니다.
물론 blocking 소켓을 이용하면서도 해결이 가능하긴 합니다.
하지만 client 가 아니고 서버쪽 구현이라면 non-blocking 소켓을 이용하시는게 좋습니다.
OS 에 상관 없는 구현이라면 select 구현이 대표적이고...
OS 에 따라 IOCP, EPOLL, KQUEUE 등이 있습니다.
답변해주셔서 고맙습니다.
답변해주셔서 고맙습니다.
댓글 달기