tail head cat sleep
QR code linking to this page

Man page  — SOCKET

명칭

socket – 통신의 엔드 포인트의 작성

내용

프로그램 라이브러리

Standard C Library (libc, -lc)

서식

#include <sys/types.h>
#include <sys/socket.h>

int
socket(int domain, int type, int protocol);

해설

socket() (은)는, 통신의 엔드 포인트를 작성해, 기술자를 되돌립니다.

domain 파라미터에서는, 통신을 행하는 통신 도메인을 지정합니다. 이것에 의해, 사용하는 프로토콜 패밀리가 선택됩니다. 이 프로토콜 패밀리는, 인클루드 파일 < sys/socket.h > 그리고 정의되고 있습니다. 현재 해석되는 포맷은 이하대로입니다.

PF_LOCAL        PF_UNIX 로 불리고 있던, 호스트내 프로토콜
PF_UNIX         호스트내 프로토콜, 사용은 장려되지 않는다.
                PF_LOCAL 를 사용
PF_INET         IPv4 프로토콜
PF_IMPLINK      ARPAnet IMP 주소
PF_PUP          BSP 와 같은 PUP 프로토콜
PF_CHAOS        MIT CHAOS 프로토콜
PF_NS           XNS (Xerox Network Systems) 프로토콜
PF_ISO          ISO 프로토콜
PF_OSI          개방형 시스템간 상호 접속 프로토콜
                (Open System Interconnection)
PF_ECMA         유럽 전자계산기 공업회
                (European Computer Manufacturers)
PF_DATAKIT      데이터 킷 (Datakit) 프로토콜
PF_CCITT        X. 25 를 닮은 ITU-T 프로토콜
PF_SNA          IBM SNA
PF_DECnet       DECnet
PF_DLI          DEC Direct / DLI (Data Link Interface) 프로토콜
PF_LAT          LAT 프로토콜
PF_HYLINK       NSC 하이퍼 채널
PF_APPLETALK    AppleTalk 프로토콜
PF_ROUTE        내부 routing protocol
PF_LINK         링크층 인터페이스
PF_XTP          XTP 프로토콜 (Xpress Transfer Protocol)
PF_COIP         connection-oriented IP, 별명 ST II
PF_CNT          Computer Network Technology 사의 프로토콜
PF_SIP          SIP 프로토콜 (Simple Internet Protocol)
PF_IPX          Novell 사 IPX (Intenet Packet eXchange) 프로토콜
PF_RTIP         RTIP 패킷의 식별로 사용
PF_PIP          PIP 패킷의 식별로 사용
PF_ISDN         통합 디지털 통신 서비스망 (ISDN)
PF_KEY          내부열쇠 관리 기능
PF_INET6        IPv6 프로토콜
PF_NATM         ATM 에 네이티브 액세스
PF_ATM          ATM
PF_NETGRAPH     Netgraph 소켓

소켓에는, 통신의 종류를 지정한다 타입 (이)가 있습니다. 현재, 정의되고 있는 타입은 이하대로입니다.

SOCK_STREAM     스트림형 소켓
SOCK_DGRAM      데이터 그램형 소켓
SOCK_RAW        생 프로토콜 인터페이스
SOCK_RDM        전달을 신뢰할 수 있는 패킷
SOCK_SEQPACKET  순서 첨부 패킷 스트림

SOCK_STREAM 타입은, 연속한, 신뢰성이 있는, 쌍방향 접속 베이스의 바이트 스트림을 제공합니다. 대역외 데이터 전송 메카니즘이 서포트되는 일도 있습니다. SOCK_DGRAM 소켓에서는, 데이터 그램 (connectionless로 신뢰성이 없는, 최대장이 고정의 (일반적으로는 작다) 메세지)가 서포트됩니다. SOCK_SEQPACKET 소켓은, 연속한, 신뢰성이 있는, 쌍방향 접속 베이스의 최대장이 고정의 데이터 그램의 전송을 제공합니다. 각 읽기 시스템 콜로 패킷 전체를 읽어낼 필요가 있을지도 모릅니다. 이 기능은 프로토콜 고유의 것으로, 현재로서는 PF_NS 그리고 밖에 실장되고 있지 않습니다. SOCK_RAW 소켓에서는, 내부 네트워크 프로토콜과 인터페이스에 액세스 할 수 있습니다. 슈퍼 유저 밖에 사용할 수 없다 SOCK_RAW 타입, 및 계획되고 있지만 아직 실장되어 있지 않다 SOCK_RDM 에 대해서는, 여기에서는 설명하지 않습니다.

protocol 그럼, 소켓으로 사용하는 특정 프로토콜을 지정합니다. 통상의 경우는, 1 개의 프로토콜만이 존재해, 지정한 프로토콜 패밀리의 특정 소켓 타입을 서포트합니다. 그러나, 복수의 프로토콜이 존재하는 일도 가능합니다. 이 경우는, 특정 프로토콜을 이 방법으로 지정할 필요가 있습니다. 사용하는 프로토콜 번호는, 통신을 실시한다 "통신 도메인" 에 고유합니다. protocols(5) (을)를 참조해 주세요.

타입 SOCK_STREAM 의 소켓은, 파이프에 유사한 전이중 바이트 스트림입니다. 스트림 소켓에서는, 접속이 끝난 상태 (으)로 하고 나서 데이터를 송수신 할 필요가 있습니다. 다른 소켓에의 접속은, connect(2) (을)를 호출해 작성할 수 있습니다. 접속되면(자), read(2) (와)과 write(2) (을)를 호출하는지, send(2) (와)과 recv(2) 의 변종을 호출해 데이터를 전송 할 수 있습니다. (인터넷 패밀리 등, 일부의 프로토콜 패밀리에서는, "암묵 접속" 그렇다고 하는 관념이 서포트되고 있습니다. 이 접속에서는, sendto(2) (을)를 호출해, 접속 오퍼레이션에 실어 데이터를 송신할 수 있습니다. ) 세션이 종료하면(자), close(2) (을)를 실행해도 상관하지 않습니다. 대역외 데이터는, send(2) 그리고 설명되고 있도록(듯이) 송신해, recv(2) 그리고 설명되고 있도록(듯이) 수신할 수 있습니다.

SOCK_STREAM 의 실장에 사용하는 통신 프로토콜에서는, 데이터의 상실이나 중복이 없는 것이 프로텍션됩니다. 피어 프로토콜에 버퍼 공간이 있는 데이터의 일부를 합리적인 시간내에 문제 없고 전송 할 수 없는 경우는, 접속이 파손했다고 보여 호출이 에러가 되어, -1 하지만 되돌려져 글로벌 변수 errnoETIMEDOUT 하지만 설정됩니다. 그 외의 동작이 없는 경우, 프로토콜은 약 1 분 마다 전송을 강제해, 소켓의 "접속" (을)를 임의에 유지합니다. 일정기간 (예를 들면 5 분간) 아이돌 접속으로 응답이 없는 경우는 에러가 됩니다. 파손한 스트림로 프로세스가 송신하면(자), SIGPIPE 시그널이 발생합니다. 이 경우, 시그널을 처리하지 않는 프로세스는 종료합니다.

SOCK_SEQPACKET 소켓은, SOCK_STREAM 소켓과 거의 같은 시스템 콜입니다. read(2) (을)를 호출해도, 요구된 양의 데이터 밖에 되돌려지고 두, 수신 패킷의 나머지의 부분은 방폐되는 점만이 다릅니다.

SOCK_DGRAM 소켓과 SOCK_RAW 소켓에서는, send(2) 의 호출로 지정된 통신 상대에게 데이터 그램을 송신할 수 있습니다. 일반적으로 데이터 그램은, 다음의 데이터 그램의 주소를 되돌린다 recvfrom(2) 그리고 수신됩니다.

fcntl(2) (을)를 호출하면(자), 대역외 데이터를 수신했을 경우의 SIGURG 시그널을 수신하는 프로세스 그룹을 지정할 수 있습니다. 비블로킹 입출력, 및 입출력 이벤트의 비동기 통지도, SIGIO 그리고 유효하게 할 수 있습니다.

소켓의 오퍼레이션은, 소켓 레벨의 옵션 그리고 제어됩니다. 이 옵션은, 파일 < sys/socket.h > 에 정의되고 있습니다. setsockopt(2) (은)는 옵션의 설정에, getsockopt(2) (은)는 옵션의 입수에 사용합니다.

반환값

에러가 발생하면(자) -1 가 되돌려집니다. 에러가 발생하지 않았던 경우는, 소켓을 참조하는 기술자가 되돌려집니다.

에러

이하와 같은 경우, socket() 의 호출은 에러가 됩니다.
[EPROTONOSUPPORT]
  프로토콜 타입이나 지정된 프로토콜이 도메인으로 서포트되고 있지 않습니다.
[EMFILE]
  프로세스마다의 기술자 테이블이 만배입니다.
[ENFILE]
  시스템 파일 테이블이 만배입니다.
[EACCES]
  지정된 타입이나 프로토콜의 소켓을 작성하는 권한이 거부되었습니다.
[ENOBUFS]
  버퍼 공간이 부족합니다. 충분한 리소스가 해방될 때까지 소켓을 작성할 수 없습니다.

관련 항목

accept(2), bind(2), connect(2), getpeername(2), getsockname(2), getsockopt(2), ioctl(2), listen(2), read(2), recv(2), select(2), send(2), shutdown(2), socketpair(2), write(2), getprotoent(3), netgraph(4) [영어], protocols(5)

PS1, 7, An Introductory 4.3 BSD Interprocess Communication Tutorial,

PS1, 8, BSD Interprocess Communication Tutorial,

역사

socket() 함수 호출은 BSD 4.2 그리고 등장했습니다.

SOCKET (2) November 24, 1997

tail head cat sleep
QR code linking to this page


Ben Bullock이 유닉스 매뉴얼 페이지에서 서비스에 대한 의견을 주시기 바랍니다. Privacy policy.

Some people, when confronted with a problem, think “I know, I'll use regular expressions.” Now they have two problems.
— Jamie Zawinski