connect, listen, accept, htons, htonl, ntohs, ntohl, inet_addr, inet_ntoa, send, recv, signal, lseek, fstat, fcntl, poll
int socket(int domain, int type, int protocol);
소켓 통신을 위한 엔드포인트를 생성하고, 해당 파일 디스크립터를 반환한다
domain
패러미터는 어떤 도메인에서 커뮤니케이션을 할 것인지 결정한다
PF_LOCAL
: Host-internal protocol (localhost)PF_INET
: IPv4PF_INET6
: IPv6PF_VSOCK
, PF_KEY
, PF_ROUTE
등이 있다type
패러미터는 어떤 방식으로 통신할 것인지 정의한다
SOCK_STREAM
: TCP 방식으로 스트림 전송
SOCK_DGRAM
: UDP 방식으로 데이터그램 전송SOCK_RAW
: 가공되지 않은 raw 데이터 전송protocol
패러미터는 사용할 프로토콜을 정의한다
man 5 protocols
에 의하면 protocols 파일에 프로토콜들이 정의되어 있으며, 해당 프로토콜들 중 선택해서 사용하면 된다고 한다반환값은 소켓의 디스크립터이고, 소켓 생성에 실패했을 경우 -1을 반환하고 errno
를 설정한다
소켓 생성에 실패하는 경우는 권한이 없을 때, 디스크립터 테이블이 꽉 차서 디스크립터를 추가할 수 없을 때, 메모리가 부족할 때, 지정한 프로토콜을 지원하지 않을 때 등이다
int setsockopt(int socket, int level, int option_name, const void* option_value, socklen_t option_len);
소켓 옵션을 지정하는 함수이다
보통 getsockopt()
함수와 같이 쓰이나, ft_irc
에서는 허용함수가 아니다
socket
패러미터는 소켓의 디스크립터를 받는다 (위에서 생성한 그것)level
패러미터는 소켓의 레벨을 명시하는 부분이다
SOL_SOCKET
, TCP 프로토콜에서의 옵션이라면 TCP 프로토콜 번호를 지정하면 된다option_name
패러미터는 설정하려는 소켓 옵션의 번호