HTTP / HTTPS: 대표적인 TCP 프로토콜
핵심 동작
서버 소켓 개수 => 접속한 클라이언트 개수 + 1
: 소켓의 지역 IP 주소, 지역 포트 번호 결정
#include <winsock2.h>
int bind (
SOCKET sock,
const struct sockaddr *addr,
int addrlen
);
사용 예시
retval = bind(listen_sock, (struct sockaddr *)&serveraddr, sizeof(serveraddr)); if (retval == SOCKET_ERROR) err_quit("bind()");
: 소켓의 TCP 상태를 LISTENING으로 변경
#include <winsock2.h>
int listen (
SOCKET sock,
int backlog
);
사용 예시
retval = listen(liste_sock, SOMAXONN) if (retval == SOCKET_ERROR) err_quit("listen()")
#include <winsock2.h>
SOCKET accept(
SOCKET sock,
struct sockaddr *addr,
int *addrlen
);
사용 예시
while (1) { // accept() addrlen = sizeof(clientaddr); client_sock = accept (listen_sock, (struct sockaddr *)&clientaddr, &addrlen); if (client_sock == INVALID_SOCKET) { err_display("accept()"); break; }
: TCP 프로토콜 수준에서 서버와 논리적 연결을 설정
#include <winsock2.h>
int connect (
SOCKET sock,
const struct sockaddr *addr,
int addrlen
);
사용 예시
retval = connect(sock, (struct sockaddr *)&serveraddr, sizeof(serveraddr));
: 응용 프로그램의 데이터 전송을 위해 운영체제의 송신 버퍼에 데이터를 복사하고 리턴
#include <winsock2.h>
int send (
SOCKET sock,
const char* buf,
int len,
int flags // 옵션 설정 (대부분 0)
);
: 운영체제의 수신 버퍼에 도착한 데이터를 응용 프로그램 버퍼에 복사, 리턴
#include <winsock2.h>
int recv(
SOCKET sock,
char *buf,
int len,
int flags /// MSG_PEEK or MSG_WAITALL 사용가능 (대부분 0 사용)
);