다음을 통해 공유


소켓 데이터 형식

Winsock 애플리케이션에서 소켓 설명자는 파일 설명자가 아니며 Winsock 함수와 함께 사용해야 합니다.

UNIX에서 소켓 설명자는 표준 파일 설명자로 표시됩니다. 따라서 UNIX의 소켓 설명자는 표준 파일 I/O 함수(예: 읽기 및 쓰기)에 전달될 수 있습니다.

또한 소켓 핸들을 포함하여 UNIX의 모든 핸들은 작고 음수가 아닌 정수이며 일부 애플리케이션은 이것이 사실이라고 가정합니다.

Windows 소켓 핸들에는 INVALID_SOCKET 값이 유효한 소켓이 아니라는 것 외에는 제한이 없습니다. 소켓 핸들은 0에서 INVALID_SOCKET–1 범위의 모든 값을 취할 수 있습니다.

SOCKET 형식은 서명되지 않으므로, 예를 들어 UNIX 환경에서 기존 소스 코드를 컴파일하면 서명되거나 서명되지 않은 데이터 형식 불일치에 대한 컴파일러 경고가 발생할 수 있습니다.

예를 들어 소켓이 함수 반환을 수락할 때 오류를 확인하는 작업은 반환 값을 –1과 비교하거나 값이 음수인지 확인하여(UNIX의 일반 및 법적 접근 방식 모두) 수행해서는 안 됩니다. 대신 애플리케이션은 Winsock2.h 헤더 파일에 정의된 매니페스트 상수 INVALID_SOCKET 사용해야 합니다. 예를 들어:

일반적인 BSD UNIX 스타일

s = socket(...);
if (s == -1)    /* or s < 0 */
    {/*...*/}

기본 스타일

s = socket(...);
if (s == INVALID_SOCKET)
    {/*...*/}

소켓 애플리케이션을 Winsock 포팅

Winsock 프로그래밍 고려 사항