Socket 생성 관련 함수
socket( )
- 소켓 생성함수로 생성된 소켓은 file discriptor 값이 부여된다.
#include <sys/socket.h>
int socket(int domain, int type, int protocol);
- 인자
- domain : 소켓이 사용할 프로토콜 체계 정보 전달
- PF_INET : IPv4 인터넷 프로토콜 체계 (수업때 이용할 것)
- type : 소켓의 데이터 전송방식
- protocol : 통신에 사용될 프로토콜 정보 전달
Socket type & protocol
연결지향형 소켓 (SOCK_STREAM) - TCP 소켓, IPPROTO_TCP
- 중간에 데이터가 소멸하지않으며 전송의 순서가 보장되고 데이터의 경계가 존재하지 않는다.
- 소켓과 소켓의 연결은 반드시 1대1 구조이다.
비연결지향형 소켓 (SOCK_DGRAM) - UDP 소켓, IPPROTO_UDP
- 빠른 속도의 전송을 지향하며 데이터의 손실 및 파손의 우려가 있다.
- 데이터의 경계가 존재하며 한번에 전송도리 수 있는 데이터의 크기는 제한되어있다.
bind( )
- 소켓의 정보 구성은 IP 주소와 port번호가 구성된다.
#include <sys/socket.h>
int bind(int fd, struct sockaddr *myaddr, socklen_t addrlen);
listen( )
- 연결요청이라는 데이터를 받기위해 소켓을 리스닝 소켓으로 만드는 함수이다.
#include <sys/type.h>
int listen(int sock, int backlog);
- 인자
- sock : 연결요청 대기상태로 만들고자하는 socket의 fd
- backlog : 연결요청 대기 큐의 크기
accept( )
- 클라이언트의 연결요청을 수락하는 함수
- 이 과정까지 마치면 소켓간의 데이터의 송수신이 이루어진다. 데이터 송수신이 이루어질 소켓도 생성된다.
#include <sys/socket.h>
int accept(int sock, struct sockaddr* addr, socklen_t* addrlen);
- 인자
- sock : 서버소켓의 fd
- addr : 연결요청 한 클라이언트의 주소정보를 받을 인자
- addrlen : 주소변수의 크기 (byte단위)
리눅스 파일 관련 함수
open( )
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int open(const char *path, int flag)
- 인자
- path : 파일 이름을 나타내는 문자열의 주소 값 전달
- flag : 파일의 오픈 모두
close( )
#include <unistd.h>
int close(int fd)
write( )
#include <unistd.h>
ssize_t write(int fd, const void* buf, size_t nbytes);
- 인자
- buf : 전송할 data가 저장된 버퍼의 주소값
- nbytes : 전송할 데이터의 바이트 수
read( )
#include <unistd.h>
ssize_t read(int fd, void* buf, size_t nbytes);
- 인자
- buf : 수신한 data를 저장할 버퍼의 주소