소켓 모델 주소 지정 in_addr_t inet_addr(const char *ip_address) 연결 지향 모델 (TCP) 무연결 지향 모델 (UDP) 주소 지정 in_addr_t inet_addr(const char *ip_address)
소켓 인터페이스 AF_INET - 네트워킹을 위한 인터넷 영역을 지정 struct sockaddr_in { AF_UNIX 프로세스들이 동일한 machine에 있을때 사용 struct sockaddr { sa_family_t sa_family; char sa_data[]; } AF_INET - 네트워킹을 위한 인터넷 영역을 지정 struct sockaddr_in { sa_family_t sin_family; in_port_t sin_port; struct in_addr sin_addr; unsigned char sin_zero[8];
소켓 인터페이스 int socket(int domain, int type, int protocol) Domain : AF_UNIX/AF_INET Type : SOCK_STREAM (연결지향), SOCK_DRAM (무연결지향) Protocol: 0 (SOCK_STREAM : TCP, SOCK_DRAM : UDP) - p348 예제 bind는 네트워크 주소와 소켓 식별자를 연관 int bind(int sockfd, const struct sockaddr *address size_t addr_len) bind호출이 성공하면 0, 그 주소에 대한 소켓이 이미 존재하면 -1 #define SIZE sizeof(struct sockaddr_in) struct sockaddr_in server = {AF_INET, 5000, INADDR_ANY} sockfd = socket(AF_INET, SOCK_STREAM, 0); bind(sockfd, (struct sockaddr *)&server, SIZE);
소켓 인터페이스 listen int listen (int sockfd, int queue_size)
소켓 인터페이스 accept 서버가 클라이언트로부터 connect요구를 받으면, 요청을 처리하기 위한 소켓 생성 int accept(int sockfd, struct sockaddr *address, size_t *add_len); return 값은 새로운 소켓 id address 인수는 연결 지향이므로 서술할 필요가 없음 add_len은 처음에는 address에 의해 기술된 주소 구조의 길이, 복귀시는 실제 복사된 바이트수 예제) p351
소켓 인터페이스 connect 서버와의 연결 요청 int connect(int csockfd, const struct sockaddr *address, size_t *add_len) csockfd : 클라이언트 소켓의 파일 디스크립터 address : 서버의 주소 add_len : 주소 구조의 길이 예제) p354
TCP를 사용한 연결형 통신 모델에서의 함수 호출
소켓 인터페이스 recv/send ssize_t recv(int sockfd, void *buffer, size_t length, int flags); ssize_t send(int sockfd, const void *buffer, size_t length, int flags); close - 프로세스가 단절된 소켓에 write/send를 시도하면 SIGPIPE 신호 이러한 경우, 적절한 신호 핸들러를 통해 처리해야 함 - SOCK_STREAM이 사용되면 소켓으로 보내지는 데이터들은 반드시 수신 프로세스로 보내질 것을 보장함 (예제) p359 test1_client.c, test1_server.c
(실습) test_client.c - server에게 “I want the information you have” 전송 - server로부터 받은 내용 출력 - server에게 “Received the information well!” 전송 test_server.c - client로부터 받은 내용 출력 - client로 “This is the information you requested.” 전송
무연결 지향 모델의 프로그래밍 클라이언트와 서버 사이에 전송되는 패킷은 그 목적지에 불확실한 순서로 도착 목적지의 주소를 명시 recvfrom & sendto (예제) p364
무연결 지향 모델의 프로그래밍 차이점 두 모듈 모두 서버에서 소켓을 생성하고 자신의 주소를 socket에 바인드 연결 모델에서는 서버는 들어오는 연결에 대해 반드시 듣기를 시작. 무 연결 모델은 필요가 없음 클라이언트는 연결 모듈에서는 서버에 연결만 함. 무연결 모델에서는 반드시 소켓을 생성하고 자신의 주소를 바인드 해야 함. Send/recv는 두 모델에서 사용 가능. Sendto와 recvfrom은 통상 무연결에서 사용
TCP를 사용한 비연결형 통신 모델에서의 함수 호출