반응형
/*
* made by so_sal
* http://sosal.tistory.com/
*/
#include<sys/socket.h> //소켓 관련 헤더
int socket( int __domain, int __type, int __protocol)
domain ::
AF_INET :: 가장 흔히 사용되는 ARPA 인터넷 프로토콜
AF_UNIX :: 유닉스 내부 프로토콜
AF_ISO :: 국제 표준 협회 (International Standards Organization) 프로토콜
/usr/include/Linux/socket.h라는 파일에 더 많은 도메인이 있습니다.
대게 AF_INET을 사용합니다.
type ::
SOCK_STREAM :: TCP 기반의 신뢰적, 순차적 양방향 형의 소켓을 사용
SOCK_DGRAM :: UDP 기반의 접속, 신뢰적이지 않는 접속
SOCK_RAW :: 내부 네트워크 프토토콜 전용 (super user 전용)
이외에
SOCK_SEQPACKET - AF_NS 프로토콜에서 사용
SOCK_RDM은 구현되지 않습니다.
protocol ::
IPPROTO_TCP :: TCP를 기반으로 하는 소켓을 생성
IPPROTO_UDP :: UDP를 기반으로 하느 소켓을 생성
ex)
int sockfd1,sockfd2;
sockfd1 = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP) //
sockfd2 = socket(AF_INET, SOCK_DGRAM , IPPROTO_UDP)//
사실 sockfd1의 마지막 인자 IPPROTO_TCP에 0을 넣어도
type SOCK_STREAM에 의해 자동으로 TCP로 연결 됩니다.
sockfd2 역시 마찬가지로 IPPROTO_UDP 대신에 0을 넣어도 됩니다.
socket(AF_INET,SOCK_STREAM,0)
socket(AF_INET,SOCK_DGRAM ,0)
소켓에 내가 원하는 데이타를 끼워서 상대 컴퓨터와
정보를 주고받을 것입니다.
이 함수는 소켓 프로그래밍에 있어서 가장 중요한 함수이기 떄문에
소켓함수가 하는 역할에 대해서 이해하는 것이 가장 중요합니다.
socket에 write함수로 데이타를 적어서 보내고,
상대방에서 온 socket을 read 함수로 읽으면서
통신을 하게 됩니다.
///////////////////////
소켓 주소 :: sockaddr ::
내부 네트워크 AF_UNIX 도메인에서는
sockaddr_un 이라는 구조체에 주소를 지정합니다.
struct sockaddr_un{
sa_family_t sun_family; // 도메인 AF_UNIX
char sun_path[]; // 경로 이름
내부 네트워크 도메인에서 서버 소켓을 찾아가려면,
소켓의 위치를 알아야 하기 때문에, 경로 이름이
주소 구조체 안에 있습니다.
ex)
struct sockaddr_un address;
address.sun_family = AF_UNIX; // 도메인 지정
strcpy(address.sun_path, "./server_socket"); //현재 위치에 서버소켓이 위치한다면
------------------------
인터넷 프로토콜 AF_INET 도메인에서는
sockaddr_in 이라는 구조체에 주소를 지정합니다
struct sockaddr_in{
short int sin_family; // 도메인 (AF_INET)
struct in_addr sin_addr; // IP 주소
unsigned short int sin_port; // 포트 번호
}
아래 ip주소를 의미하는 구조체 in_addr는
struct in_addr{
unsigned long int s_addr;
}
AF_INET 소켓 주소는 도메인과 IP주소, 포트번호로 결정됩니다.
ex)
struct sockaddr_in address;
address.sin_family=AF_INET;
address.sin_addr.s_addr = inet_addr("127.0.0.1");
address.sin_port= 7777;
Socket 게시물들은
begining Linux programing.
Linux 언쉬리드' 를 참고하였습니다.
* made by so_sal
* http://sosal.tistory.com/
*/
#include<sys/socket.h> //소켓 관련 헤더
int socket( int __domain, int __type, int __protocol)
domain ::
AF_INET :: 가장 흔히 사용되는 ARPA 인터넷 프로토콜
AF_UNIX :: 유닉스 내부 프로토콜
AF_ISO :: 국제 표준 협회 (International Standards Organization) 프로토콜
/usr/include/Linux/socket.h라는 파일에 더 많은 도메인이 있습니다.
대게 AF_INET을 사용합니다.
type ::
SOCK_STREAM :: TCP 기반의 신뢰적, 순차적 양방향 형의 소켓을 사용
SOCK_DGRAM :: UDP 기반의 접속, 신뢰적이지 않는 접속
SOCK_RAW :: 내부 네트워크 프토토콜 전용 (super user 전용)
이외에
SOCK_SEQPACKET - AF_NS 프로토콜에서 사용
SOCK_RDM은 구현되지 않습니다.
protocol ::
IPPROTO_TCP :: TCP를 기반으로 하는 소켓을 생성
IPPROTO_UDP :: UDP를 기반으로 하느 소켓을 생성
ex)
int sockfd1,sockfd2;
sockfd1 = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP) //
sockfd2 = socket(AF_INET, SOCK_DGRAM , IPPROTO_UDP)//
사실 sockfd1의 마지막 인자 IPPROTO_TCP에 0을 넣어도
type SOCK_STREAM에 의해 자동으로 TCP로 연결 됩니다.
sockfd2 역시 마찬가지로 IPPROTO_UDP 대신에 0을 넣어도 됩니다.
socket(AF_INET,SOCK_STREAM,0)
socket(AF_INET,SOCK_DGRAM ,0)
소켓에 내가 원하는 데이타를 끼워서 상대 컴퓨터와
정보를 주고받을 것입니다.
이 함수는 소켓 프로그래밍에 있어서 가장 중요한 함수이기 떄문에
소켓함수가 하는 역할에 대해서 이해하는 것이 가장 중요합니다.
socket에 write함수로 데이타를 적어서 보내고,
상대방에서 온 socket을 read 함수로 읽으면서
통신을 하게 됩니다.
///////////////////////
소켓 주소 :: sockaddr ::
내부 네트워크 AF_UNIX 도메인에서는
sockaddr_un 이라는 구조체에 주소를 지정합니다.
struct sockaddr_un{
sa_family_t sun_family; // 도메인 AF_UNIX
char sun_path[]; // 경로 이름
내부 네트워크 도메인에서 서버 소켓을 찾아가려면,
소켓의 위치를 알아야 하기 때문에, 경로 이름이
주소 구조체 안에 있습니다.
ex)
struct sockaddr_un address;
address.sun_family = AF_UNIX; // 도메인 지정
strcpy(address.sun_path, "./server_socket"); //현재 위치에 서버소켓이 위치한다면
------------------------
인터넷 프로토콜 AF_INET 도메인에서는
sockaddr_in 이라는 구조체에 주소를 지정합니다
struct sockaddr_in{
short int sin_family; // 도메인 (AF_INET)
struct in_addr sin_addr; // IP 주소
unsigned short int sin_port; // 포트 번호
}
아래 ip주소를 의미하는 구조체 in_addr는
struct in_addr{
unsigned long int s_addr;
}
AF_INET 소켓 주소는 도메인과 IP주소, 포트번호로 결정됩니다.
ex)
struct sockaddr_in address;
address.sin_family=AF_INET;
address.sin_addr.s_addr = inet_addr("127.0.0.1");
address.sin_port= 7777;
Socket 게시물들은
begining Linux programing.
Linux 언쉬리드' 를 참고하였습니다.
'Linux > Linux_programing' 카테고리의 다른 글
Socket - 03. Client socket (2) | 2009.10.03 |
---|---|
Socket - 02. Server socket (0) | 2009.10.03 |
리눅스 FILE - open(), close() 시스템콜 (1) | 2009.09.28 |
리눅스 FILE - read() 시스템콜 (1) | 2009.09.27 |
리눅스 FILE - Write() 시스템콜 (1) | 2009.09.27 |