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을 보냈을
때 먹히지 않을 방법이니 말입니다.