보통 이런 에러가 나는경우는, 한쪽에서는 끊었는데 다른 한쪽에서 메시지를 보낸경우 이런 에러를 리턴하게 된다.
한쪽에서 먼저 끊은 이유야 여러가지겠지만,
본인은 대량의 로드 테스트 클라이언트를 돌리고 있었고, 로직에서 커스텀 핑 체크를 하고있는데, 핑 패킷을 서버가 못받아서 서버에서 일방적으로 끊은 이유였다.
그런데 이 현상은 와이파이를 쓸때만 일어나고, 유선으로 하면 발생하지 않았다.
이유가 무엇일까?
와이파이 네트웤 속도가 느려서 로드 테스트를 돌리는 대량의 패킷들이 병목으로 쭉 쌓였다가 한방에 서버한테 넘어가는 것이다.
서버에서는 bufferevent_setwatermark 로 맥스 버퍼 사이즈를 정해놓고 있는데, 이 수치를 넘어가는 패킷들이 몰려오니까 나머지는 짤려서 패킷이 유실되는 경우가 발생하고 있던 것이다.
그래서 클라이언트는 아무리 핑을 보내도 서버가 받지 못해서 not alive 유저로 판단해서 끊어 버리기 때문에, 클라에서 다음 패킷을 보낼때 socket bronken pipe가 전달되었던 것이다.
'TCP/IP' 카테고리의 다른 글
sockaddr vs sockaddr_in (0) | 2015.08.01 |
---|