'programming'에 해당되는 글 387건

  1. 2017.05.25 connect

connect

programming/C_C++ 2017. 5. 25. 14:28
반응형

CONNECT(2)                 리눅스 프로그래머 매뉴얼                 CONNECT(2)

이름
       connect - 소켓 연결을 시작한다.

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

       int connect(int sockfd, const struct sockaddr *serv_addr, socklen_t addrlen);

설명
       파일 기술자 sockfd 는 소켓을 가리켜야 한다.  만일 소켓이 SOCK_DGRAM 타입이라면 serv_addr 주소는 기본적으로 보낸
       데이터그램의 주소이며 받은 데이터그램의 유일한주소이다.  만일 소켓이 SOCK_STREAM 나 SOCK_SEQPACKET이라면, 함 수
       는  다른 소켓에 대한 연결을 만든다.  다른 소켓은 serv_addr에의해 명시되며, 이것은 소켓의 통신 공간에 있는 주소(
       addrlen길이) 이다.  각각의 통신 공간들은 자신의 방식대로 serv_addr 인자를 해석한다.

       일반적으로, 연결 지향 프로토콜 소켓들은 성공적으로 한번에 connect 한다; 비연결 지향 프로토콜 소켓들은 이것들 의
       관 련 사항을 바꾸기 위해여러번 connect 를 사용 한다.  비 연결 지향 소켓들은 sockaddr 의 sa_family 멤버가 가지고
       있는 주소를 AF_UNSPEC으로설정하고 연결하여 관련사항들을 없앤다.

반환값
       만일 연결이나 바인딩이 성공한다면, 0이 반환된다.  에러시, -1이 반환되며 errno 는 적당한 값으로 설정된다.

에러
       다음것을은 단지 일반적 소켓 에러들이다. 여기에는 다른 도메인에 의존한 에러들이있을수 있다.

       EBADF  파일 기술자가 기술자 테이블에 있는 유효한 인덱스가 아니다.

       EFAULT 소켓 구조체 주소가 사용자의 주소공간외에 있다.

       ENOTSOCK
              파일 기술자가 소켓과 관련되어 있지 않다.

       EISCONN
              소켓이 이미 연결되어 있다.

       ECONNREFUSED
              원격 주소에 대해 기다리고 있는 것이 하나도 없다.

       ETIMEDOUT
              연결 시도중 타임아웃이 발생했다. 서버는 너무 busy 상태이어서 새 연결을받아들일수 없다. IP 소켓에서 동 기
              화가 서버에서 가능할경우 매우 오래걸린다는점을 주의해라.

       ENETUNREACH
              네트워크에 도달할수 없다.

       EADDRINUSE
              로컬 주소가 이미 사용중이다.

       EINPROGRESS
              소 켓 이   비- 블 럭 킹 이 며 연결이 즉시 완성될수 없다.  쓰기를 위해 소켓을 선택하여 연결 완성을 위해서
              select(2)나 poll(2)으로가능하다.  select 가 쓰기가능을 가리킨후, connect 이 성공적 (SO_ERROR 는 0이다)으
              로 끝났는지 아닌지 (SO_ERROR 는 실패에 대한 이유를 설명하면서 여기에서 나열된 보통의 에러조건들중 하나이
              다.)  를 결정하기 위해서 SOL_SOCKET 레벨의 SO_ERROR 옵션을 읽기위해 getsockopt(2)을사용해라.

       EALREADY
              소켓이 비-블럭킹이고 전 연결 시도가 아직 완전하지 않다.

       EAGAIN 사용할수 있는 로컬 포트가 더이상 없거나 라우팅 캐싱에 엔트리가 충분하지 않다.  PF_INET 시 로컬 포트의 수
              를 중가시키기 위해서는 ip(7)에있는 net.ipv4.ip_local_port_range sysctl을 참고해라.

       EAFNOSUPPORT
              전달된 주소가 sa_family 필드에 있는 정확한 주소 가족을 가지고 있지 않다.

       EACCES, EPERM
              사 용자가 소켓 브로드캐스트 플래그를 가능하게 하지 않고 주소를 브러드캐스트주소에 연결할려고 시도 했거나
              로컬 방화벽 규칙때문에 연결 요구가 실패했다.

호환
       SVr4, 4.4BSD ( connect 함수는 BSD4.2에서 처음 나타났다.). SVr4는 추가적으로 일반적 에러 조건 들  EADDRNOTAVAIL,
       EINVAL, EAFNOSUPPORT, EALREADY, EINTR, EPROTOTYPE, 그리고 ENOSR를문서화 했다.  여기서 기술하지 않은 많은 추가적
       에러 조건들돌 역시 문서화 되었다.

주의
       connect 의 세번쩨 인자는 실제로 int이다(그리고 이것은 BSD 4.*와 libc4, libc5가 가지고있다.) 몇몇 POSIX에서 혼란
       은  socklen_t 때문이다.  표준은 아직 채택되지 않았지만 glibc2는 이미 그것을 따르고 있고 또한 socklen_t도 가지고
       있다.

버그
       AF_UNSPEC 주로로 connect 를 호출하여 소켓의 접속을 끝는것은 아직 수행되지 않는다.

관련 항목
       accept(2), bind(2), listen(2), socket(2), getsockname(2)

역자
       정강훈 <skyeyes@soback.kornet.net>, 2000년 7월 3일

Linux 2.2                       1998년 10월 3일                     CONNECT(2)

반응형
Posted by 공간사랑
,