SOCKET(2)

이름
socket - 통신을 위해 말단(endpoint)를 생성한다.

사용법
#include <sys/types.h>
#include <sys/socket.h>

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

설명
Socket 은 통신을 위한 종점(endpoint)를 생성하고 디스크립터를 반환한다.

도메인 매개변수는 통신 도메인을 지정한다; 이것은 통신에 사용되어 질 프로토콜 패밀리를 선택한다. 이러한 프로토콜 패밀리들은 <sys/socket.h> 에서 정의된다. 현재 쓰여지는 포맷은 다음을 포함한다:

Name | Purpose | Man page
 | Local communication |
 | IPv4 Internet protocols |
 | IPv6 Internet protocols |
 | IPX - Novell protocols |
 | Kernel user interface device |
 | ITU-T X.25 / ISO-8208 protocol |
 | Amateur radio AX.25 protocol |
 | Access to raw ATM PVCs |
 | Appletalk |
 | Low level packet interface |

소켓은 지시된 통신 semantics를 지정하는 type 을 갖는다. 현재 정의된 타입은 다음과 같다:

SOCK_DGRAM
    데이타그램 지원

SOCK_RAW
    raw network protocol 접근 지원.

SOCK_RDM
    보증을 요구하지 않는 데이타그램 레이어지원.

SOCK_PACKET
    새로운 프로그램에서 잘 쓰이지 않는다; packet(7) 을 본다.

몇몇 소켓타입은 모든 프로토콜군에 의해 구현되어지지 않을 것이다; 예를들면, SOCK_SEQPACKET 는 AF_INET 때문에 구현되지 않는다.

프로토콜 은 소켓을 사용하기 위해 특정 프로토콜을 지정한다. 싱글 프로토콜은 주어진 프로토콜군안에 특정 소켓타입을 지원하도록 존재한다. 그러나, 특정 프로토콜이 방법으로 지정되어야만하는 곳엔 많은 프로토콜이 존재가능하다.

SOCK_STREAM 타입의 소켓은 full-duplex byte streams이다. 그것들은 레코드 경계를 보호하진 않는다. 스트림 소켓은 모든 데이타가 그것으로 송수신 되기전에 접속 상태이어야한다. 다른 소켓과의 접속은 connect(2) 호출로 생성한다. 한번 접속에 데이타는 read(2) 와 write(2) 호출 혹은 send(2) 와 recv(2) 호출 의 몇몇 변수를 사용해 전송한다. 세션이 완벽할때 close(2) 는 실행된다. Out-of-band 에이타는 또한 send(2) 의 설명대로 전송되고 recv(2) 의 설명대로 수신된다.

SOCK_DGRAM 와 SOCK_RAW 소켓은 send(2) 호출에 지정된 correspondents로 데이타그램의 송신을 허락한다. 데이타그램은 대개 다음 데이타그램을 반환하는 recvfrom(2) 로 수신된다.

SOCK_PACKET 은 장치 드라이버로부터 직접 raw패킷을 받는 쓰이지 않는 소켓타입이다. 대신 packet(7) 을 사용한다.

소켓의 작용은 소켓레벨 옵션에 의해 제어된다. 이러한 옵션들은 <sys/socket.h> 에 정의 되어있다. Setsockopt(2) 와 getsockopt(2) 는 옵션을 설정하고 얻는데 사용된다.

반환값
에러시, -1이 반환된다; 그 밖의 반환값은 디스크립터 참조소켓이다.

에러

EPROTONOSUPPORT
    프로토콜 타입이나 지정된 프로토콜은 이 도메인에서 지원되지 않는다.

ENFILE
    새로운 소켓구조를 지정하기에 커널메모리가 부족하다.

EMFILE
    프로세스 파일 테이블이 overflow.

EACCES
    지정된 타입의 생성된 소켓이나 프로토콜 권한이 거부되었다.

ENOBUFS or ENOMEM
    메모리가 부족하다. 소켓은 프리메모리가 생길때 까지 생성될 수 없다.

EINVAL
    알려지지 않은 프로토콜이나 프로토콜군으로 유효하지 않다.

다른 에러는 프로토콜 모듈에의해 생성된다.

호환
4.4BSD (the socket 함수 호출은 4.2BSD에서 선보였다). 대개 비-bsd시스템에서는 bsd소켓레이어의 클론을 지원한다.

버그
SOCK_UUCP 는 아직 구현되지 않았다.

관련 항목
accept(2), bind(2), connect(2), getprotoent(3), getsockname(2), getsockopt(2), ioctl(2), listen(2), read(2), recv(2), select(2), send(2), shutdown(2), socketpair(2), write(2)

“An Introductory 4.3 BSD Interprocess Communication Tutorial” is reprinted in UNIX Programmer's Supplementary Documents Volume 1.

“BSD Interprocess Communication Tutorial” is reprinted in UNIX Programmer's Supplementary Documents Volume 1.

역자
ASPLINUX, 2000년 7월 29일