// 성공 시 소켓 핸들, 실패시 INVALID_SOCKET 반환
#include <winsock2.h>
SOCKET socket(int af, int type, int protocol)
af : 프로토콜 체계
type : 소켓 타입
protocol : 호스트간 통신에 사용되는 프로토콜
// IP주소와 PORT번호 할당
// 성공 시 0, 실패 시 SOCKET_ERROR 반환
#include <winsock2.h>
int bind(SOCKET s, const struct sockaddr* name, int namelen)
s : socket함수로부터 할당 받은 소켓 핸들
name : IP주소, PORT번호를 할당한 sockaddr구조체 포인터. 보통 SOCKADDR_IN타입의 구조체에 IP주소와 PORT번호를 할당하고 SOCKADDR*로 형변환해서 사용한다
namelen : 2번째 인자인 name의 size
// 서버 소켓이 클라이언트 프로그램의 연결 요청을 받을 수 있는 상태가 되게함
// 성공 시 0, 실패시 SOCKET_ERROR 반환
#include <winsock2.h>
int listen(SOCKET s, int backlog)
s : socket
backlog : client를 대기시켜 놓는 queue의 크기
// 성공 시 소켓 핸들, 실패시 INVALID_SOCKET 반환
// 클라이언트가 서버에 연결 요청할 때 까지 리턴하지 않는 블로킹 함수
// 서버에서는 루프속에서 accept -> 서비스 제공 코드 -> close(client_sock)를 반복
#include <winsock2.h>
SOCKET accept(SOCKET s, struct sockaddr* addr, int* addrlen);
s : socket
addr : 연결 요청 한 클라이언트의 주소 정보를 담을 변수의 주소 값. 호출시 addr에 클라이언트의 주소 정보가 채워짐
addrlen : sizeof(addr)
// 클라이언트에서 서버로 연결 요청시 사용하는 함수
// 성공 시 0, 실패 시 SOCKET_ERROR 반환
#include <winsock2.h>
int connect(SOCKET s, const struct sockaddr* name, int namelen)
s : socket
name : 연결 요청할 서버의 주소 정보를 담은 구조체 주소값
namelen : sizeof(name)
// 윈도우에서 소켓을 닫을 때 호출하는 함수
// 성공 시 0, 실패 시 SOCKET_ERROR 반환
#include <winsock2.h>
int closesocket(SOCKET s)
#include <winsock2.h>
int send(SOCKET s, const char* buf, int len, int flags)
s : 데이터 전송 대상 소켓
buf : 보낼 메세지가 담긴 버퍼의 주소
len : 전송할 버퍼 사이즈
flags : 전송 시 적용할 옵션
#include <winsock2.h>
int recv(SOCKET s, const char* buf, int len, int flags)
s : 데이터 수신 대상과의 연결을 의미하는 소켓(클라이언트 코드에서는 자기자신의 소켓, 서버 코드에서는 accept함수가 반환한 소켓)
buf : 수신된 데이터를 저장할 버퍼의 주소
len : 수신할 수 있는 최대 바이트 수
flags : 데이터 수신시 적용할 옵션
'공부 > Server' 카테고리의 다른 글
소켓 옵션 정리 (0) | 2021.08.01 |
---|---|
도메인(Domain)과 DNS(Domain Name System) (0) | 2021.08.01 |
TCP 기반의 소켓의 우아한 연결 종료(Half-close) (0) | 2021.08.01 |
TCP/UDP에 대한 이해 (0) | 2021.08.01 |
윈도우 기반 소켓 프로그래밍 시작하기(socket, protocol 개념 및 기본적인 함수 정리) (0) | 2021.07.27 |