소켓 생성
#include <netdb.h>
int socket(int domain, int type, int protocol);
매개변수
1) domain
인터넷 프로토콜 버전 선택 - AF_INET(IPv4) / AF_INET6(IPv6)
*인터넷 프로토콜: 데이터 패킷이 네트워크를 통해 이동하고 올바르게 도착하게 하기 위한 규칙
2) type
프로토콜의 동작 방식 선택 - SOCK_STREAM(TCP 기반 통신) / SOCK_DGRAM(UDP 기반 통신)
SOCK_STREAM, SOCK_DGRAM에 대해 알아보기
3) protocol
필수 항목 X - 입력을 원치 않을 경우 0
type 선택으로 이미 프로토콜을 알기 때문에 명시적인 용도로 지정
프로토콜 정보 지정 - IPPROTO_TCP(TCP 지정), IPPROTO_TCP(UDP 지정)
소켓 함수 호출 결과 값
- 네트워크 프로그래밍을 위해서 소켓을 생성하면 운영체제마다 부르는 명칭이 다르다.
Windows | Linux |
Handle | 소켓 파일 (소켓 생성 = 이름 없는 파일 생성) |
Linux의 소켓 파일에는 이름이 없다. 없는데 어떻게 사용할 수 있을까?!
➡️ 파일 디스크립터 리턴
파일 디스크립터
- Linux는 각각의 파일을 구분하기 위해서 각 파일마다 번호를 배정하는데 이 번호(정수값)를 말한다.
- 소켓을 생성 ➡️ 소켓 파일 생성 ➡️ 소켓 파일에 대한 파일 디스크립터 배정
소켓 생성 코드
#include <cstdio>
#include <stdlib.h>
#include <netdb.h>
int main()
{
// 1. Socket 생성
int socket = socket(AF_INET, SOCK_STREAM, 0);
if (socket == -1) {
printf("Socket() 에러");
exit(1);
}
return 0;
}
참조🔗: https://www.cloudflare.com/ko-kr/learning/network-layer/internet-protocol/
'Network > Socket' 카테고리의 다른 글
🔖IP 주소 변환 함수 (0) | 2023.05.09 |
---|---|
🔖SOCKADDR VS SOCKADDR_IN (0) | 2023.05.09 |
[Linux Socket] Server - bind() 함수[2] (0) | 2023.05.04 |
🔖 SOCK_STREAM VS SOCK_DGAM (0) | 2023.05.04 |
소켓(SOCKET)이란? (0) | 2023.05.03 |