WSAsend로 보낸 패킷의 목적지와 출발지 주소가 000000...;;

3권에서 새로 도입된 네트웍 및 멀티플레이어 프로그로그래밍 섹션을 위한 게시판입니다.

Moderator: 류광

Locked
비회원

WSAsend로 보낸 패킷의 목적지와 출발지 주소가 000000...;;

Post by 비회원 »

몇시간째 끙끙 앓다가 이렇게 질문 올립니다. ㅠ_ㅠ

비동기 소켓을 만든 뒤 서버간 통신을 위해

A 서버와 B 서버를 연결했습니다.

A 서버에서 Connect 함수를 사용, B 서버에서 AcceptEx 합수를 사용해
성공적으로 연결을 시켰습니다.

그리고 AcceptEx의 특성상 A 서버에서 인증용 패킷을 하나 보내어 B 서버로의 연결을 마무리 지었습니다.

[여기서 버그가 생겨 버렸습니다.]
그 뒤에 B 서버에서 연결이 완료 되었다는 패킷을 A 서버로 보내려 했답니다.

헌데 아무리 전송 함수를 써보아도 A 서버에서 패킷을 받지 못하는 것이었습니다.

A 서버에서 B 서버로의 패킷은 잘 받는데 유독 B 서버에서 A 서버로 보내는 패킷만

전송이 되지 않더군요.


디버깅을 위해 WPE를 사용해서 양쪽의 패킷을 열어보았습니다.

헌데 히안하게도 B 서버에서 A 서버로 보내는 패킷의 출발지 주소와 목적지 주소가

전부 0 으로 되어있었습니다.

이런 상태이니 정상적이지 않은 것은 알아 냈습니다만...

도무지 그 원인을 찾을 수가 없더군요. ㅠ_ㅠ

WSAsend 함수는 여지없이 함수 호출 성공을 알리는 0을 리턴하고...



혹시나 같은 증상을 겪어보신 분 계시면 답변 부탁드립니다.

이 문제 때문에 아주 죽겠습니다. ㅠ_ㅠa
비회원

로직상의 문제일 듯 하네요..

Post by 비회원 »

AcceptEx를 써서 accept한 socket에 몇가지 socket option을 설정하고, IOCP와 연결시킨 후에 WSASend()또는 WSARecv()를 써서 통신을 하는 과정에서 세팅 또는 처리 로직에서 문제가 생긴 듯 하네요.

자세한 것은 수도코드 정도는 봐야 알 수 있을 것 같네요.
Debug로 한 줄 한 줄 따라가다 보시면 발견하실 수도 있으실 것 같네요.
비회원

답변 감사합니다 ;ㅁ;

Post by 비회원 »

아. 답변 감사합니다.

역시 로직상의 문제였습니다. (할말 잃음. 머엉...)



클라이언트와 LOCAL 서버간 통신에서 같은 IOCP 워커 쓰레드를 사용하다보니
클라이언트 패킷에서 사용하는 암호화 모듈과 EndMaker체크를 해주는 모듈에서 걸려버렸습니다.

LOCAL 서버간의 통신 패킷은 암호화를 돌려주지 않아서
패킷을 받는 부분에서 유효하지 않은 패킷으로 처리해버리고는 처리를 하지 않았더라구요.


한마디로 몇시간동안 완전 삽질했습니다. ...

(츄르륵...)



답변 감사하구요 즐프 하십시오. ^^
( 헌데 아직 WPE에서 양쪽 주소를 00000000 으로 표시하는 이유는 발견하지 못했습니다. ^^;
혹시 아시는 분 계시다면 답변 부탁드립니다. :) )
비회원

peer address

Post by 비회원 »

AcceptEx에 추가 버퍼로 넣은 address buffer에 주소가 담겨진다는 MSDN을 보고 저도 해보았으나, 안되더군요. 옵션을 제대로 세팅하지 않은 거 같았는데...

어쨌던, 그거와는 상관 없이 L4에서 open port live ping monitor를 하는 과정에서 AcceptEx와 IOCP의 문제인지 알 수 없는 상황이 발생하여 Connection Close를 감지 못하는 케이스가 발생했었습니다.
해서 AcceptEx를 사용하지 않기로 하고 Accept를 어쩔 수 없이 사용했던 적이 있었죠.

Accept와 AcceptEx에 대한 성능 논의도 꽤 많았고 어쨌던 성능 상으로는 AcceptEx가 더 좋은 건 확실하지만 Accept만으로도 왠만한 서비스에는 문제가 없다고 생각합니다.

Accept Thread를 돌리고 getpeername으로 주소를 파악하면 충분할 듯 보이네요.

P.S. API 함수 하나 하나의 성능보다 전체적인 처리 로직의 성능 향상이 더욱 큰 효과를 본다고 생각합니다. 부분 부분의 성능에 너무 치중하기 보다 전반적인 흐름의 성능 향상에 집중하면 보다 더 고효율의 서버를 제작할 수 있지 않을까요?
비회원

답변 감사합니다. ^^

Post by 비회원 »

추가 답변 감사합니다. ^^b

혹시 그 문제의 원인은 밝혀 내셨는지요.
무척 궁금해지는 주제내요.

알고계신 부분이라면 추가 답변 부탁드리겠습니다. ^ㅁ^


P.S로 달아주신 부분도 세겨듣겠습니다. 감사합니다.
Locked