서버와 클라이언트가 공통으로 사용하는 구조체 및 함수
struct sockaddr{
u_short sa_family; // 주소 체계 구분하는 변수, 2바이트
char sa_data[14]; // 실제 주소 저장, 14바이트
}
struct sockaddr_in{
short sin_family; // 주소 체계 -> AF_INET(IPv4)
u_short sin_port; // 16비트 포트 번호
struct in_addr sin_addr; // 32비트 IP 주소
char sin_zero[8]; // 전체 크기를 16비트로 맞추기 위한 변수
};
struct in_addr{
u_long s_addr; // 32비트 IP 주소를 저장할 구조체
}
#include <sys/types.h>
#include <sys/socket.h>
int socket(int domain, int type, int protocol);
int domain
인터넷을 통해 통신할 지, 같은 시스템 내에서 프로세스끼리 통신할지의 여부 설정
> PF_INET, AF_INET : IPv4 인터넷 프로토콜 사용
PF_INET6 : IPv6 인터넷 프로토콜 사용
PF_LOCAL, AF_UNIX : 같은 시스템 내에서 프로세스끼리 통신
PF_PACKET : 저수준 소켓 인터페이스 사용
PF_IPX : IPX 노벨 프로토콜을 사용
>
int type
데이터의 전송 형태를 지정
> SOCK_STREAM : TCP/IP 프로토콜 이용
SOCK_DGRAM : UDP/IP 프로토콜 이용
>
int protocol
통신에 있어 특정 프로토콜을 사용을 지정하기 위한 변수
보통 0값 사용
#include <string.h>
함수 원형
void *memset(void *ptr, int value, size_t num);
인수
void *ptr
채우고자 하는 메모리의 시작 포인터
int value
메모리에 채우고자 하는 값
int형 자료형이지만 내부에서는 unsigned char로 변환되어 저장
size_t num
메모리 크기의 바이트 수
반환
#include <sys/types.h>
#include <sys/socket.h>
함수 원형
int send(int s, const void *msg, size_t len, int flags);
인수
int s
소켓 디스크립터
void *msg
전송할 데이터
size_t len
데이터의 바이트 단위 길이
int flags
사용 가능 옵션
MSG_DONTWAIT : 전송할 준비가 전에 대기 상태가 필요하다면 기다리지 않고 -1을 반환하면서 복귀
MSG_NOSIGNAL : 상대방과 연결이 끊겼을 때, SIGPTPE 시그널을 받지 않도록 한다.
⇒ SIGPIPE : 읽기 끝이 닫힌 파이프에 쓰기 시도 시 프로세스로 전송되는 깨진 파이프 신호
반환
헤더
#include <sys/types.h>
#include <sys/socket.h>
함수 원형
int recv(int s, void *buf, size_t len, int flags);
인수
int s
소켓 디스크립터
void *buf
수신할 버퍼 포인터 데이터
size_t len
버퍼의 바이트 단위 크기
int flags
사용 가능 옵션
MSG_DONTWAIT : 수신을 위해 대기가 필요하다면 기다리지 않고 -1을 반환하면서 바로 복귀
MSG_NOSIGNAL : 상대방과 연결이 끊겼을 때, SIGPIPE 시그널을 받지 않는다.
반환