소켓 입출력

소켓 입출력

BSD 타입 소켓을 조작하는 술어들을 설명해요.

출처: GNU Prolog Manual - Sockets input/output

본문

소개

이 술어 집합은 소켓을 조작하는 방법을 제공해요. 이 술어들은 대응하는 BSD-타입 소켓 함수에 대한 직접적인 인터페이스예요. 이 기능은 GNU Prolog의 소켓 부분이 설치된 경우에만 사용할 수 있어요. BSD 소켓에 익숙한 독자는 즉시 이해하겠지만, 그 외에는 소켓에 대한 연구가 필요해요.

도메인은 BSD-타입 소켓의 같은 도메인에 대응하는 AF_INET 또는 AF_UNIX 원자예요. 주소는 AF_INET(HostName, Port) 또는 AF_UNIX(SocketName) 형태예요. HostName은 기계 이름을 나타내는 원자, Port는 포트 번호, SocketName은 소켓을 나타내는 원자예요.

기본적으로 소켓과 연관된 스트림은 블록 버퍼링돼요. set_stream_buffering/2(8.10.27절) 술어를 사용해 이 모드를 바꿀 수 있어요. 또한 기본적으로 텍스트 스트림이에요. 이진 스트림이 필요하면 set_stream_type/2(8.10.25절)를 사용해 유형을 바꿔요.

socket/2

Templates

socket(+socket_domain, -integer)

Description socket(Domain, Socket)은 도메인이 Domain(8.28절)인 소켓을 생성하고 소켓을 식별하는 기술자와 Socket을 통일해요. 이 술어는 C Unix 함수 socket(2)에 대한 인터페이스예요.

Errors

  • Domain이 변수 — instantiation_error
  • Domain이 변수도 원자도 아님 — type_error(atom, Domain)
  • Domain이 원자이지만 유효한 소켓 도메인이 아님 — domain_error(socket_domain, Domain)
  • Socket이 변수가 아님 — uninstantiation_error(Socket)
  • 운영체제 오류가 발생하고 os_error Prolog 플래그 값이 error(8.22.1절) — system_error(오류를 설명하는 원자)

Portability: GNU Prolog 술어.

socket_close/1

Templates

socket_close(+integer)

Description socket_close(Socket)은 기술자가 Socket인 소켓을 닫아요. Socket이 socket_connect/4(8.28.5절)처럼 스트림을 일으켰으면 이 술어를 사용해서는 안 돼요. 그 경우 연관된 스트림에서 close/2(8.10.7절)를 사용하면 돼요.

Errors

  • Socket이 변수 — instantiation_error
  • Socket이 변수도 정수도 아님 — type_error(integer, Socket)
  • 운영체제 오류가 발생하고 os_error Prolog 플래그 값이 error(8.22.1절) — system_error(오류를 설명하는 원자)

Portability: GNU Prolog 술어.

socket_bind/2

Templates

socket_bind(+integer, +socket_address)

Description socket_bind(Socket, Address)는 기술자가 Socket인 소켓을 Address(8.28절)가 지정한 주소에 바인딩해요. Address가 AF_INET(HostName, Port) 형태이고 HostName이 인스턴스화되지 않았으면 현재 기계 이름과 통일돼요. Port가 인스턴스화되지 않았으면 운영체제가 고른 포트 번호와 통일돼요. 이 술어는 C Unix 함수 bind(2)에 대한 인터페이스예요.

Errors

  • Socket이 변수 — instantiation_error
  • Socket이 변수도 정수도 아님 — type_error(integer, Socket)
  • Address가 변수 — instantiation_error
  • Address가 변수도 유효한 주소도 아님 — domain_error(socket_address, Address)
  • Address = AF_UNIX(E)이고 E가 변수 — instantiation_error
  • Address = AF_UNIX(E) 또는 AF_INET(E, _)이고 E가 변수도 원자도 아님 — type_error(atom, E)
  • Address = AF_UNIX(E)이고 E가 원자이지만 유효한 경로명이 아님 — domain_error(os_path, E)
  • Address = AF_INET(_, E)이고 E가 변수도 정수도 아님 — type_error(integer, E)
  • 운영체제 오류가 발생하고 os_error Prolog 플래그 값이 error(8.22.1절) — system_error(오류를 설명하는 원자)

Portability: GNU Prolog 술어.

socket_connect/4

Templates

socket_connect(+integer, +socket_address, -stream, -stream)

Description socket_connect(Socket, Address, StreamIn, StreamOut)은 기술자가 Socket인 소켓을 Address(8.28절)가 지정한 주소에 연결해요. StreamIn은 연결의 입력과 연관된 스트림 항과 통일돼요(입력 스트림). 이 스트림에서 읽으면 소켓에서 데이터를 얻어요. StreamOut은 연결의 출력과 연관된 스트림 항과 통일돼요(출력 스트림). 이 스트림에 쓰면 소켓으로 데이터를 보내요. select/5의 사용이 유용할 수 있어요(8.27.29절). 이 술어는 C Unix 함수 connect(2)에 대한 인터페이스예요.

Errors

  • Socket이 변수 — instantiation_error
  • Socket이 변수도 정수도 아님 — type_error(integer, Socket)
  • Address가 변수 — instantiation_error
  • Address가 변수도 유효한 주소도 아님 — domain_error(socket_address, Address)
  • Address = AF_UNIX(E) 또는 AF_INET(E, _) 또는 Address = AF_INET(_, E)이고 E가 변수 — instantiation_error
  • Address = AF_UNIX(E) 또는 AF_INET(E, _)이고 E가 변수도 원자도 아님 — type_error(atom, E)
  • Address = AF_UNIX(E)이고 E가 원자이지만 유효한 경로명이 아님 — domain_error(os_path, E)
  • Address = AF_INET(_, E)이고 E가 변수도 정수도 아님 — type_error(integer, E)
  • StreamIn이 변수가 아님 — uninstantiation_error(StreamIn)
  • StreamOut이 변수가 아님 — uninstantiation_error(StreamOut)
  • 운영체제 오류가 발생하고 os_error Prolog 플래그 값이 error(8.22.1절) — system_error(오류를 설명하는 원자)

Portability: GNU Prolog 술어.

socket_listen/2

Templates

socket_listen(+integer, +integer)

Description socket_listen(Socket, Length)는 기술자가 Socket인 소켓이 대기 중인 연결의 최대 백로그 큐 Length를 갖도록 정의해요. 이 술어는 C Unix 함수 listen(2)에 대한 인터페이스예요.

Errors

  • Socket이 변수 — instantiation_error
  • Socket이 변수도 정수도 아님 — type_error(integer, Socket)
  • Length가 변수 — instantiation_error
  • Length가 변수도 정수도 아님 — type_error(integer, Length)
  • 운영체제 오류가 발생하고 os_error Prolog 플래그 값이 error(8.22.1절) — system_error(오류를 설명하는 원자)

Portability: GNU Prolog 술어.

socket_accept/4, socket_accept/3

Templates

socket_accept(+integer, -atom, -stream, -stream)
socket_accept(+integer, -stream, -stream)

Description socket_accept(Socket, Client, StreamIn, StreamOut)은 기술자가 Socket인 소켓에 대한 첫 번째 연결을 추출해요. 도메인이 AF_INET이면 Client는 연결하는 기계의 숫자-점 표기법의 인터넷 호스트 주소를 이름으로 하는 원자와 통일돼요. StreamIn은 연결의 입력과 연관된 스트림 항과 통일돼요(입력 스트림). 이 스트림에서 읽으면 소켓에서 데이터를 얻어요. StreamOut은 연결의 출력과 연관된 스트림 항과 통일돼요(출력 스트림). 이 스트림에 쓰면 소켓으로 데이터를 보내요. select/5의 사용이 유용할 수 있어요(8.27.29절). 이 술어는 C Unix 함수 accept(2)에 대한 인터페이스예요.

socket_accept(Socket, StreamIn, StreamOut)socket_accept(Socket, _, StreamIn, StreamOut)과 동일해요.

Errors

  • Socket이 변수 — instantiation_error
  • Socket이 변수도 정수도 아님 — type_error(integer, Socket)
  • Client가 변수가 아님 — uninstantiation_error(Client)
  • StreamIn이 변수가 아님 — uninstantiation_error(StreamIn)
  • StreamOut이 변수가 아님 — uninstantiation_error(StreamOut)
  • 운영체제 오류가 발생하고 os_error Prolog 플래그 값이 error(8.22.1절) — system_error(오류를 설명하는 원자)

Portability: GNU Prolog 술어.

hostname_address/2

Templates

hostname_address(+atom, ?atom)
hostname_address(?atom, +atom)

Description hostname_address(HostName, HostAddress)는 HostName의 숫자-점 표기법의 인터넷 호스트 주소가 HostAddress이면 성공해요. 호스트 이름은 완전 자격 이름, 자격 없는 이름 또는 기계의 별칭으로 제공될 수 있어요. 기계 이름이나 주소를 해석할 수 없으면 이 술어는 실패해요.

Errors

  • HostName과 HostAddress가 모두 변수 — instantiation_error
  • HostName이 변수도 원자도 아님 — type_error(atom, HostName)
  • HostAddress가 변수도 원자도 아님 — type_error(atom, HostAddress)
  • Address가 변수도 유효한 주소도 아님 — domain_error(socket_address, Address)

Portability: GNU Prolog 술어.

더 알아보기