connect(2)
한 소켓의 연결을 초기화한다.
사용법
#include <sys/types.h> /* See NOTES */
#include <sys/socket.h>
int connect(int sockfd, const struct sockaddr *addr,
socklen_t addrlen);
설명
서버의 주소(addr)로 접속하여 connection을 유지합니다. connect(2) 함수는 socket(2)의 type 설정시 SOCK_STREAM, SOCK_SEQPACKET 등으로 설정된 connection-base socket의 경우에만 가능합니다. 두번째 파라미터인 struct sockaddr는 Address Family에 따라서 다른 구조체를 갖습니다.
sockfd
- socket(2)의 두번째 parameter인 type이 SOCK_STREAM, SOCK_SEQPACKET으로 생성한 socket descriptor.
addr
- socket에 설정할 주소 정보에 대한 struct입니다.
struct sockaddr는 socket을 지원하는 Protocol의 기본 골격에 대한 sturct 이며,
AF_* (Address Family)에 따라서 struct를 다르게 정의하여 사용합니다.
struct sockaddr {
sa_family_t sa_family;
char sa_data[14];
};
로 sa_family에 AF_*값을 설정하고 AF_*값에 따라서 sa_data의 구조가 다릅니다.
따라서 AF_*값에 따라서 구조체를 재정의하여 사용하며,
Address Family에 따라서 char sa_data[14]; 즉, 14 바이트보다 큰 경우가 있으므로
사실상 struct sockaddr은 의미가 없는 구조체입니다.
addrlen
- addr 구조체의 크기를 저장한 변수입니다. (AF_* 상수에 따라 크기가 다름)
리턴값
-1이 아님
정상적으로 connection 됨
-1
오류가 발생, 상세한 오류는 errno에 저장
ECONNREFUSED : 서버 소켓이 listen 상태가 아니거나 방화벽으로 막혔을 때.
ENETUNREACH : Network이 도달할 수 없음
ETIMEDOUT : 접속시 timeout 발생함.
참고링크
https://www.it-note.kr/117?category=1068194</a >
'네트워크 > MAN Page' 카테고리의 다른 글
[unistd.h]fork(2) (0) | 2020.10.13 |
---|---|
[sys/socket.h] accept(2) (0) | 2020.09.23 |
[sys/socket.h] listen(2) (0) | 2020.09.23 |
[sys/socket.h] bind(2) (0) | 2020.09.23 |
[sys/socket.h] socket(2) (0) | 2020.09.23 |