4메가를 send를 하는데 에러가 나네요?
글쓴이: hellowee / 작성시간: 토, 2003/06/28 - 11:11오전
while(1) { addlen = send(pUser->socket, sendobj->buf + sendobj->location, sendobj->buflen - sendobj->location, 0); if (addlen<0) { if (errno==EINTR) { continue; } else { shutdown(pUser->socket, 2); break; } } if (addlen==0) { shutdown(pUser->socket, 2); break; } if (addlen==sendobj->buflen - sendobj->location) { break; } else { sendobj->location += addlen; } } 이렇게 했는데 에러가 나네요...
Forums:
에러코드를 보니까..이에러가나네요..EAGAIN
이 에러 해결 방법을 없나요?
sleep(1)를 주면 돌아갈때도 있고..에러날때도 있네요?
해결 방법 좀 가르쳐주세요
man send
맨 페이지를 읽어 보시면 어째서 EAGAIN 이 나는지 알수 있답니다.
너무 큰 블록을 한번에 보내려고 하면 어느정도 수준까지 (Socket
너무 큰 블록을 한번에 보내려고 하면
어느정도 수준까지 (Socket buffer)는 재시도 하든 뭐하든지간에
질문하신분의 코드로는 가능하리라 봅니다.
하지만 Socket buffer가 너무 많이 쌓이면
(실제 쏘지도 못하고 그냥 대기중인 큐들이 많으면)
약간 수정이 필요할듯 싶습니다.
select에서 fd_set 항목 3번째가 이를 검사할수 있는데
저도 사용해본적이 없어서 이렇다할 예제는 없네요.
그냥 참고해보세요. 즉, send하기전에
select를 3번째에 걸어서 거기에 걸린것에 대해서는 루프를 빠져나오지 말고
그때 sleep(1)주는식의 코드가 되어야 될듯 하네요.
아닐수도 있는데 잘못된 예기라면 누군가 지적해주겠거니하고
막무가니로 글 올립니다.
에러 메시지좀 올려주시죠.
에러 메시지좀 올려주시죠.
------------------ P.S. --------------
지식은 오픈해서 검증받아야 산지식이된다고 동네 아저씨가 그러더라.
댓글 달기