소켓 입출력
소켓 입출력
BSD 타입 소켓을 조작하는 술어들을 설명해요.
본문
소개
이 술어 집합은 소켓을 조작하는 방법을 제공해요. 이 술어들은 대응하는 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_errorProlog 플래그 값이 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_errorProlog 플래그 값이 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_errorProlog 플래그 값이 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_errorProlog 플래그 값이 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_errorProlog 플래그 값이 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_errorProlog 플래그 값이 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 술어.