Q&A

  • WSARecvFrom() 그리고 PWSABUF
Berkley socket을 쓸 때는 이런 문제가 없었는데, windows socket에서는

WSARecvFrom() 의 두번째 아규먼트, 즉 전송받은 메시지가 PWSABUF type으로

제한되어있습니다. 그래서 메시지를 받은 다음에 제가 보낸 메시지 타입으로

다시 type casting을 해줘야죠. 무슨 이야기냐면 먼저

TWSABUF = record

buf : PChar;

len : u_long; //u_long 은 unsigned long

end;

여기서 buf가 PChar형인데 제가 보내고자하는 메시지는 Longint type이어서

보내고 난 후에 Buff.buf 를 처리하기 곤란한 상태가 된다는 것입니다. 예를

들자면 제가 sendto()로 보낸 메시지가 Longint type의 '111'이었습니다.

WSARecvFrom()이 그것을 받기를 PChar type의 Buff.buf로 받아내기때문에

그순간 111은 ascii code로 인식되어 character 'o'가 되어버린다는 것입니다.

그러니 type casting을 해서 원하는 형태로 변형할 수조차 없게되버린다는

것입니다. 그렇다고 character 'o'를 다시 ascii code로 바꿔서 출력하도록

하는 것은 좀 이상하겠죠? 왜냐면 ascii code에 없는 Longint type을 보냈을

때 먹히지 않을 방법이니 말입니다.

0  COMMENTS