본문 바로가기

TCP/IP11

sendto() sendto() : UDP 기반의 데이터 전송 함수 UDP 소켓은 연결 상태를 유지 하지 않으므로 (소켓은 단순히 우체통의 역활만 하므로), 데이터를 전송하는 함수 호출 시 반드시 보내고자 하는 곳의 주소 정보를 포함해야 한다. 여기 주소 정보를 포함 #include #include int sendto(int sock, const void *msg, int len, unsigned flags, const struct sockaddr * addr, int addrlen) 성공시 전송된 바이트수 , 실패시 -1 리턴 * - 옵션 설명 - * sock : 데이터를 전송할 때 사용할 소켓의 파일 디스크립터를 인자로 넘겨 준다. 데이터를 네트워크로 전송하기 위해서는 기본적으로 소켓이 필요하다. 이러한 목적으로 사.. 2010. 3. 28.
SOCKADDR_IN 구조체 * struct sockaddr_in : IPv4의 주소 체계를 나타내는 구조체 struct sockaddr_in { short sin_family; //주소 체계(address family) unsigned short sin_port; // 16비트 TCP/UDP Port struct in_addr sin_addr; // 32비트 IPv4주소 char sin_zero[8]; // 사용되지 않음 }; sin_family : 프로토콜 체계마다 주소 체계가 다르다. sin_family 변수에는 사용되는 주소 체계에 대한 정보를 대입해 준다. 표현될 수 있는 주소 체계 정보는 밑에 표와 같다. 주소체계(Address Family) 정의 AF_INET IPv4 인터넷 프로토콜 AF_INET6 IP_6 인터넷 프.. 2010. 3. 28.
SOCKET() 함수 socket( ) : 소켓을 생성 하는 함수 #include #include int socket(int domain, int type, protocol); domain : 생성할 소켓이 통신을 하기 위해 사용할 프로토콜를 설정 type: 소켓이 데이터를 전송하는데 있어서 , 사용하게 되는 전송 타입을 설정 protocol : 두 호스트 간에 통신을 하는데 있어서 특정 프로토콜을 지정 하기위해 사용된다 socket 함수 호출 시 요구되는 세 개의 인자들이 각각 무엇을 의미하는지 상당히 애매하게 느껴질 것이다. 그렇게 느껴지는 것도 어떻게 보면 당연한 것이다. 그러나 소켓을 생성하기 위해서 이 세가지 인자에 대한 이해는 필수이다. 소켓 API는 다수의 프로토콜 패밀리들에 대한 하나의 총괄적인 인터페이스를 제.. 2010. 3. 25.
Linux: SOCK_PARCKET 리눅스 환경에서 데이터링크계층으로부터 패킷을 받을려면 SOCK_PACKET이라는 종류의 소켓을 만들어야 한다. 이를 위해서 우선 관리자의 권한을 가져야 하고, socket의 세번째 인수가 이더넷 프레임 종류를 나타내는 0이 아닌 값이어야 한다. 예를 들면 데이터링크로부터 패킷을 받기 위해서 다음과 같이 써야 한다. fd = socket(AF_INET, SOCK_PACKET, htons(ETH_P_ALL)); 이는 데이터링크가 받는 모든 프로토콜의 프레임을 반환할 것이다. 만일 IPv4 프레임만을 원한다면, 호출은 다음과 같다. fd = socket(AF_INET, SOCK_PACKET, htons(ETH_P_IP)); 마지막 인수로서의 다른 상수는 ETH_P_ARP나 ETH_P_IPV6 등이 있다. ET.. 2009. 12. 3.