. [C언어, 웹서버] server 관련 함수 및 소스코드
본문 바로가기
프로그래밍 공부/CSPP

[C언어, 웹서버] server 관련 함수 및 소스코드

by 불냥이_ 2021. 1. 24.

[소켓 프로그래밍 C언어] 기본적인 서버 프로그램 만들기 (리눅스, 유닉스 편) server 관련 함수 및 소스코드 (tistory.com)

 

[소켓 프로그래밍 C언어] 기본적인 서버 프로그램 만들기 (리눅스, 유닉스 편) server 관련 함수 및

안녕하세요~! 오늘은 기본적인 TCP 서버 프로그램을 작성해볼게요. 소켓 프로그래밍으로 간단한 채팅 서버를 만들어볼 생각인데, 찬찬히 진행해보도록 합시다. 소켓 프로그래밍이란? 오늘날 모

jhnyang.tistory.com

책으로만 공부하다가 너무 막혀서 잘 써져있는 블로그를 통해 공부해보기로 했다.

1. socket()

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

int socket(int domain, int type, int protocol);

	Returns: nonnegative descriptor if OK, −1 on error

소켓을 생성하는 함수이다.

int domain : 어떤 영역에서 통신할 것인지에 대한 영역을 지정한다. AF_UNIX (프로세스끼리 통신할 때), AF_INET (IPv4), AF_INET6 (IPv6) 를 넣을 수 있다. 

int type : 어떤 서비스 타입의 소켓을 생성할 것인지를 적는다.  SOCK_STREAM (TCP), SOCK_DGRAM (UDP), SOCK_RAW (Raw방식;TCP나 UDP를 사용하지 않은 채로 바로 IP계층 사용 시) 

int protocol : 소켓 방식에서 사용할 프로토콜 (IPPROTO_TCP : TCP방식, IPPROTO_UDP : UDP방식, 0:type에서 미리 정해진 경우)

리턴 값 :: 성공 시 : 0 (소켓 디스크립터)  // 실패 시 : -1 (소켓 생성 실패)

(인자는 getaddrinfo 함수로 넣을 수 있다.)

 

2. bind()

#include <sys/socket.h>

int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);

	Returns: 0 if OK, −1 on error

 소켓이랑 서버의 정보를 묶어주는 함수이다. 

클라이언트랑 서버랑 통신하기 위해서는 비단 IP뿐 아니라, 디스크립터까지 필요하다. 그래서 디스크립터랑 IP를 묶어주는 작업을 수행한다. 

int sockfd : 위의 socket()함수에서 받은 리턴값 (소켓 디스크립터) 를 넣어주면 된다.

struct sockaddr *myaddr : 서버의 IP 주소를 넣어준다.

socklen_t addrlen : 주소 길이를 넣어준다. (컴퓨터는 어디까지가 IP이고 어디부터가 다른 데이터인지 모르기때문에 항상 길이를 지정해줘서, 여기까지가 IP라는 것을 알려주어야한다.)

리턴값 :: 성공 시 : 0 // 실패 시 : -1

 

3. listen()

#include <sys/socket.h>

int listen(int sockfd, int backlog);

	Returns: 0 if OK, −1 on error

 외부의 컴퓨터에서 요청이 왔을 때, 수락할 수 있게 대기상태로 들어가는 함수이다. (서버가 돌아가고, 외부로부터 connect 요청이 오지 않으면 무한반복으로 실행될 것이다,)

int sockfd : bind()와 같이 서버의 소켓디스크립터가 들어간다. 

int backlog : 연결 대기열의 크기를 지정한다. 어떤 클라이언트가 이미 서버와 작업중이라면, 다른 클라이언트는 작업이 끝날 때까지 기다리고 있어야 한다. listen()은 그런 클라이언트를 대기시키는 역할도 수행한다.

리턴값 :: 성공 시 : 0 // 실패 시 : -1 

 

4. accept()

#include <sys/socket.h>

int accept(int listenfd, struct sockaddr *addr, int *addrlen);
	Returns: nonnegative connected descriptor if OK, −1 on error

 서버 소켓에다가 클라이언트를 연결하는 함수이다. 그렇기때문에 이제 클라이언트 정보도 들어가게 된다.

int sockfd : 역시 서버 소켓 디스크립터를 넣어준다.

struct sockaddr *addr : 클라이언트 주소 정보를 담고 있는 구조체

socklen_t *addrlen : 위 구조체의 길이 

댓글