기본 소켓시스템 함수 (비연결형)

System Program/socket 2014. 3. 3. 11:48

1. 소켓 생성

 

소켓 생성은 연결형 소켓 생성함수와 동일하게 socket()함수를 사용한다.

단, socket()함수 사용 시 type에 SOCKET_DGRAM을 준다.

 

2.  소켓 결속

 

다른 응용 프로그램에서 보낸 데이터를 전송 받으려면 bind()를 이용해 자신의 소켓을 이미 알려진

주소로 결속한다.

 

여기까지는 연결형 소켓 생성 과정과 동일하다. 자세한 함수 정의는 연결형 소개 부분 참조

 

3. 데이터 교환

 

3.1. 데이터 전송

 

#include <sys/socket.h>

ssize_t sendto(int sockfd, void *buffer, size_t length, int flags,

const struct sockaddr *dest_addr, socklen_t addrlen);

전송한 바이트 수를 리턴한다. 에러가 발생하면 '-1'을 리턴  

 

첫번째부터 세번째까지는 write()와 동일하고, flags는 send() 함수를 참조

뒤의 주소는 데이터를 보낼 곳의 주소를 지정한다.

 

3.2. 데이터 수신

 

#include <sys/socket.h>

ssize_t recvfrom(int sockfd, void *buffer, size_t length, int flags,

struct sockaddr *src_addr, socklen_t *addrlen);

전송된 바이트 수를 리턴한다. EOF인 경우에는 '0'을 에러가 발생하면 '-1'을 리턴한다.  

 

세번째까지 인자는 위와 동일하고 주소는 데이터를 전송한 원격지의 주소 정보를 갖는다.

 

4. 연결형 함수의 변칙적 사용

 

연결형 소켓에서 사용하는 read()/write()함수를 비연결형에서도 사용할 수 있다.

다만 비연결형에서 사용하기 위해서 설정을 해 주어야 한다. 일반적이지 아니니 이런 것이 있다고만 생각하자.

 

비연결형 소켓에 또한 연결형 소켓에서 사용하는 connect() 함수를 사용할 수 있다.

이런 경우를 연결형 데이터그램 소켓이라고 한다.

이 연결형 데이터 그램 소켓일 경우에는 read()/write()함수를 사용할 수 있고,

연결형 소켓처럼 지정한 주소에서만 데이터 송수신이 가능하게 할 수 있는 장점이 있다.

 

5. 흐름도

 

 

 

 

 

: