본문 바로가기

리눅스 소켓 프로그래밍 TCPIP

소켓 시작하기

오류처리

소켓함수 리턴값으로 오류 확인이 되었다면 전역변수 errno로 구체적인 오류코드를 얻을 수 있다.

오류코드에 대응하는 오류메시지는 strerror( ) 함수로 얻을 수 있다.

strerror( ) 함수는 오류코드를 받고 오류 메시지를 리턴한다.

 

소켓 생성과 닫기

소켓생성하기

소켓을 사용해 통신하려면 통신 양단이 같은 프로토콜을 사용해야한다

-> TCP 사용할 것인지, UDP 사용할 것인지를 약속해야함

 

socket( ) 함수는 사용자가 프로토콜을 통해 통신할 수 있도록 내부적으로 리소스를 할당하고

접근할 수 있는 핸들값을 리턴한다 -> 소켓 디스크럽터 라고 부르며 각종 소켓 함수를 호출 할 때 인수로 전달한다.

 

C

#include <sys/types.h>
#include <sys/socket.h>

int socket( ① int domain, ② int type, ③ int protocol );

1. 주소 체계 지정
2. 소켓 타입 지정
3. 사용할 프로토콜 지정

 

 

주소 체계

통신상대로 유일하게 지정할 수 있는 주소 필요 -> 주소체계 -> 지정방식

네트워크 프로토콜의 종류에 따라 달라진다.

사용할 프로토콜 주소체계
IPv4 AF_INET
IPv6 AF_INET6

 

사용할 프로토콜에 따라 socket( ) 함수의 첫번 째 인수로 전달

 

소켓 타입

 

 

 

프로토콜

 

 

주소 체계와 소켓 타입이 같더라도 해당 프로토콜이 같더라도
해당 프로토콜이 두 개 이상 존재할 경우 명시적으로 지정해야한다.

소켓닫기

소켓을 사용한 통신을 마치면 리소스를 반환해야한다

-> close( ) 함수 사용

C

#include <unistd.h>

int close( int fd);

| 성공 0 | 실패 -1 |

 

 

C

int main(int argc, char *argv[]) {
// 소켓 생성
SOCKET sock = socket(AF_INET, SOCK_STREAM, 0);
if (sock == INVALID_SOCKET) err_quit("socket()");
printf("[알림] 소켓 생성 성공\n");

// 소켓 닫기
close(sock);
return 0;
}