sockfd는 socket()함수에 의해서 만들어진
소켓지정자다. SOCK_DGRAM 타입의 소켓일 경우는 보통 connect()를
사용하지 않지만 만약에 사용했다면, serv_addr는
데이터그램을 받을 곳의 유일한 주소값이 된다. 그렇지 않고
SOCK_STREAM, SOCK_SEQPACKET라면 serv_addr에
대한 연결을 만든다. addrlen는
serv_addr구조체의 크기다.
보통 연결지향 프로토콜 소켓들은 한번에 connect를 한다. 비연결 지향
프로토콜들은 serv_addr타입과 관련된 사항을 바꾸기 위해 여러번
connect를 사용한다. 이러한 과정에서 비 연결 지향 소켓들은
sa_family멤버의 주소를 AF_UNSPEC로 설정하고
연결해서 연결과 관련된 필요없는 사항들을 없앤다.
1.3. 반환값
성공하면 0을 리턴한다. 실패했을 경우는 -1을 리턴하고 적당한 errno를
설정한다.
1.4. 에러
EBADF
파일지정자가 지정자테이블에 있는 유효한 인덱스가 아니다.
EFAULT
소켓 구조체의 주소가 사용자 주소공간 바깥에 있다.
ENOSOCK
파일지정자가 소켓과 관련되어 있지 않다.
EISCONN
이미 연결된 소켓이다.
ECONNREFUSE
원격서버에서 연결을 거부했다. 보통 listen대기열의 공간이
더이상 남아 있지 않았을 때 발생한다.
ETIMEOUT
연결 시도중 타임아웃이 발생했다. 서버가 너무 바쁜 상태이어서
새 연결을 받아들일 수 없을 경우 발생한다.
ENETUNREACH
네트워크에 도달할 수 없다.
EALREADY
소켓이 비봉쇄이고 연결 시도가 아직 완전하지 않다.
EAGAIN
사용 가능한 로컬 포트가 더이상 없거나 라우팅 캐싱에
공간이 충분하지 않다. PF_INET일 때 라우팅 캐싱테이블의
공간을 늘릴리면 ip(7)에 있는
net.ipv4.ip_local_port_range를 참고하라.
EACCES, EPERM
사용자가 소켓 브로드캐스트 플래그를 가능하게 하지
않고 주소를 브로드캐스트 주소에 연결하려고 했거나
방화벽 규칙 때문에 연결요구가 실패했다.
1장. connect(2)
소켓에 연결을 시도한다.
1.1. 사용법
1.2. 설명
sockfd는 socket()함수에 의해서 만들어진 소켓지정자다. SOCK_DGRAM 타입의 소켓일 경우는 보통 connect()를 사용하지 않지만 만약에 사용했다면, serv_addr는 데이터그램을 받을 곳의 유일한 주소값이 된다. 그렇지 않고 SOCK_STREAM, SOCK_SEQPACKET라면 serv_addr에 대한 연결을 만든다. addrlen는 serv_addr구조체의 크기다.
보통 연결지향 프로토콜 소켓들은 한번에 connect를 한다. 비연결 지향 프로토콜들은 serv_addr타입과 관련된 사항을 바꾸기 위해 여러번 connect를 사용한다. 이러한 과정에서 비 연결 지향 소켓들은 sa_family멤버의 주소를 AF_UNSPEC로 설정하고 연결해서 연결과 관련된 필요없는 사항들을 없앤다.
1.3. 반환값
성공하면 0을 리턴한다. 실패했을 경우는 -1을 리턴하고 적당한 errno를 설정한다.
1.4. 에러
파일지정자가 지정자테이블에 있는 유효한 인덱스가 아니다.
소켓 구조체의 주소가 사용자 주소공간 바깥에 있다.
파일지정자가 소켓과 관련되어 있지 않다.
이미 연결된 소켓이다.
원격서버에서 연결을 거부했다. 보통 listen대기열의 공간이 더이상 남아 있지 않았을 때 발생한다.
연결 시도중 타임아웃이 발생했다. 서버가 너무 바쁜 상태이어서 새 연결을 받아들일 수 없을 경우 발생한다.
네트워크에 도달할 수 없다.
소켓이 비봉쇄이고 연결 시도가 아직 완전하지 않다.
사용 가능한 로컬 포트가 더이상 없거나 라우팅 캐싱에 공간이 충분하지 않다. PF_INET일 때 라우팅 캐싱테이블의 공간을 늘릴리면 ip(7)에 있는 net.ipv4.ip_local_port_range를 참고하라.
사용자가 소켓 브로드캐스트 플래그를 가능하게 하지 않고 주소를 브로드캐스트 주소에 연결하려고 했거나 방화벽 규칙 때문에 연결요구가 실패했다.
1.5. 예제
1.6. 참고문헌
셈플로 알아보는 소켓프로그래밍(1)
Socket Layer
다중연결 서버 만들기 (1)
다중연결 서버 만들기 (2)
socket(2)
accept(2)
listen(2)
Recent Posts
Archive Posts
Tags