Window
#include <winsock2.h>
Linux
#include <sys/types.h>
#include <sys/socket.h>
Function Prototype
int socket(int domain, int type, protocol);
첫 번째 인자는 통신 도메인을 지정하는 인자로 어떤 네트워크에서 사용될 소켓인지 지정.
소켓은 TCP/IP 인터넷 망에서 사용될 수 있을 뿐만 아니라 다른 망에서도 함께 사용될 수 있다.
첫 번째 인자를 통해서 어떤 망에서 사용될 소켓인지 지정할 수 있다.
TCP/IP에서 사용될 소켓이므로 AF_INET값을 주로 사용한다.
두 번째 인자는 소켓의 형태를 지정하는 것으로 스트림을 의미하는 SOCK_STREAM이 있다.
데이터그램을 의미하는 SOCK_DGRAM이 있다. 많이 익숙할 것이라고 생각한다.
소켓을 생성하면 이 두가지 타입을 많이 사용하기 때문이다. 하지만 프로토콜 헤더를
직접 만들 필요가 있으면 SOCK_RAW 형태로 소켓을 생성하여 직접 프로토콜 헤더를 만들 수도 있다.
RAW 소켓은 특별한 형태의 패킷을 만들어서 전송할 수 있을 뿐만 아니라, 다른 애플리케이션이 송수신하는 네트워크 패킷의 데이터를 함께 확인할 수 있다. 따라서 리눅스에서는 보안상의 이유로 root 권한으로만
실행할 수 있고(일반 유저원한으로 실행하면 permission 문제가 나타남), 윈도우에서는 RAW 소켓을 지원하지 않는다. 윈도우에서는 네트워크 필터 드라이버를 이용하여 프로그램을 개발해야 한다.
마지막 인자로는 어떤 통신 프로토콜을 사용할지 지정하는 것으로 소켓이 정상적으로 생성되면 각각의
소켓을 구분할 수 있는 소켓 디스크립터(socket descriptor)가 리턴되며, 소켓을 생성하는 과정중에서 오류가 발생하면 0보다 작은 값이 리턴된다.
'[ ★ ]Study > Network' 카테고리의 다른 글
listen 함수 (0) | 2017.03.11 |
---|---|
bind 함수 (0) | 2017.03.05 |
CGI 란 (0) | 2017.02.26 |
Available threads in Windows and Linux. (0) | 2017.02.26 |
Packet Capture Library (0) | 2017.02.26 |
댓글