오답노트

[ft_irc] irc protocol limechat reconnecting

todoni 2022. 10. 19. 21:56

클라이언트로 limechat 사용중인데 4분마다 자꾸 연결이 종료되는 현상이 있었다.

분명 클라이언트에서 뭔가가 오고 서버측에서 대답을 줘서 내가 살아있단걸 알려 줘야 할 것 같은데

아무것도 전혀 오질 않는 것이었다..?

그렇다고 일단은 단일 쓰레드 단일 프로세스로 루프에 갇혀 kevent로 이벤트를 기다리는데 시간마다 핑을 보내주자니 

어떻게 해야 할까 싶었는데

 

소름 돋는 사실.. rfc1459 명세에도 나와있지만 user가 성공적으로 등록 되고 나면 서버가 클라이언트로 RPL_어쩌고의 numeric을 보내줘야 한다고 써있었는데.. 이걸 해야지 클라이언트가 서버측으로 PONG을 알아서 보낸다;

왜 먼저 보내는데 PING이 아니라 PONG 인지는 모르겠지만 ㅋ 이것 때문에도 한참 헤맸다. 다른 분들 코드 실행시켜보니 분명히 가만히 있어도 PONG이 커맨드로 들어오는데 코드에 먼저 PING을 보내는 부분은 어디에도 없고 정말 미스테리였는데

하.. 문서를 잘 읽자

irc는 정말 명세와 포맷의 모든것 인듯 하다. 꼭 잘 맞춰서 보내줘야함.. 별거 아닌 것처럼 보일지라도.. 

결국은 역시나 내 잘못.. 응.. 컴퓨터는 늘 잘못이 없다.. ㅎ

 

*흥미로운점

Numeric을 1을 보내면 이것만으로 client에 logged in 됐다고 뜬다.

근데 MOTD 관련된 RPL numeric은 꼭! 375, 372, 376 순서도 꼭 이대로 3개를 다 보내야 logged in 이 됨.

이건 뭐라고 찾아봐야할지 모르겠지만; 분명 명세에 내가 안 읽고 지나친 부분에 설명이 있겠지 ㅋ

The server MAY send other numerics and messages. The server MUST then respond as though the client sent it the MOTD command, i.e. it must send either the successful Message of the Day numerics or the ERR_NOMOTD (422) numeric. ㅋ.. 역시 .. 있다 ^^