대학원 연구실에 들어가기 전에 프로그래밍 공부하면서 소켓 프로그래밍 공부 중입니다.
교재는 윤성우의 열혈 TCP/IP 소켓 프로그래밍 책을 보며 독학하고 있습니다.
깊이 생각하고 반성하면서 공부하진 않고 그냥 흐름 따라가면서 쭉 읽어가는 중입니다.
오랜만에 VMWare로 리눅스도 써보고 재밌네요.
소스코드를 따라 쓰고 컴파일해서 결과를 확인하고 있는데 윈도우 환경에서 컴파일 에러를 일으키는 소스 코드가 있습니다.
연습은 Visual Studio 2012로 했는데요.
2012년 출간 된 5쇄에서 p. 143 소스코드 53번 줄의 recv(hSocket, &result, RLT_SIZE, 0);와 p. 144의 47번 줄의 recv(hClntSock, &opndCnt, 1, 0); 에서 컴파일 에러 C2664가 발생합니다.
컴파일 오류가 발생하는 이유를 자세히 보시려면 MSDN의 문서를 참고하세요(링크: https://msdn.microsoft.com/ko-kr/library/s5b150wd.aspx).
컴파일 오류가 발생하는 이유를 요약하면 암시적으로 형 변환을 시도하면 안 되는데 했기 때문입니다.
함수 recv는
int recv(
_In_ SOCKET s,
_Out_ char *buf,
_In_ int len,
_In_ int flags
);
위와 같은 인수를 필요로 합니다(원본 링크: https://msdn.microsoft.com/en-us/library/windows/desktop/ms740121(v=vs.85).aspx).
책의 소스코드에는 2번 인수를 int형을 써서 컴파일 에러가 발생한 것입니다.
그래서 올바른 결과를 얻으려면 2번 인수에 (char *)를 추가해서 형 변환 이후에 쓰시면 됩니다.
컴파일 에러가 나지 않는 소스코드:
recv(hSocket, (char *)&result, RLT_SIZE, 0);
recv(hClntSock, (char *)&opndCnt, 1, 0);
|
'소소한 일상. 다요리.' 카테고리의 다른 글
샴 고양이 스텔라의 요염한 자세. (0) | 2015.11.29 |
---|---|
티스토리 초대장 배포합니다. (23) | 2015.11.26 |
티스토리 초대장 배포합니다. (99) | 2015.09.10 |
순서도(flow chart, 또는 흐름도) 그리는 프로그램 (1) | 2015.07.22 |
파이썬 배울 때 좋은 책. (0) | 2015.06.18 |
블로그 유입 경로 통계 (2) | 2015.02.24 |
아이폰 충전 케이블 고쳤습니다. (0) | 2015.02.11 |
맥북 프로 파워 코드를 스스로 고쳤습니다. (0) | 2014.12.30 |