소켓통신의 흐름
2.3 소켓의 생성과 해지
1)Socket생성
int socket (int domain, int type, int protocol);
④반환값 ①프로토콜 패밀리 ②소켓형식 ③프로토콜
① 프로토콜 패밀리 ┬ PF_INET : IPv4인터넷
┣ PF_INET6 : IPv6 인터넷 프로토콜 체계
└ PF_UNIX : 유닉스
※ PF(프로토콜 패밀리) ≒ AF(어드레스 패밀리)
② 소켓형식 ┬ SOCK_STREAM : TCP형 소켓을 만들겠다.
└ SOCK_DGRAM : UDP형 소켓을 만들겠다.
③ 프로토콜 ┬ IPPROTO_TCP : TCP
└ IPPROTO_UDP : UDP
④ 반환값 ┬ 성공 : 음수가 아닌 값 (3, 4, 5…)
└ 실패 : –1
예제 int socket(PF_INET, SOCK_STREAM, 0);
소켓형식과 프로토콜은 TCP형이면 TCP, UDP형이면 UDP로 같게 되므로,
소켓형식에 SOCK_STREAM을 넣은 뒤 프로토콜에 0을 넣으면 소켓형식에 맞춰 TCP protocol로 맞춰진다.
2)Socket해제
int close(socket);
반환값 -1 에러 나머지는 모두 성공
2.4.1범용 주소 형식
16byte
struct sockaddr{
sa_family_t sa_family;
char sa_data[14];
};
struct sockaddr{
2byte//주소패밀리(AF_UNIX,AF_INET,AF_INET6()
2byte//ip주소(4byte) + port번호(2byte)
}
2.4.2 IPv4주소
16byte 범용주소와 같다
struct sockaddr_in{
sa_family_t sa_family;
in_port_t sin_port;
struct in_addr sin_addr;
char sin_zero[14];
};
struct sockaddr_in{
2byte//주소패밀리
2byte//포트번호
4byte//ip주소
8byte//char[8]
};
memset(&serv_addr,0,sizeof(serv_addr));
memset
메모리를 지정한 문자로 채웁니다.
Declaration
void *memset( void *dest, int c, size_t count )
Return value
성공 - 채워진 메모리 주소(dest 매개 변수) 반환
실패 - 없음
Parameters
dest - 채울 메모리의 주소
c - 채울 문자
count - 채우려고 하는 문자 개수
Detail descriptions
memset()는 버퍼를 똑같은 "문자"로 채울 때 사용합니다. 명확하게 문자라고 표현했듯이 단위는 바이트입니다. memset()는 문자를 저장하는 char 배열뿐만 아니라 모든 종류의 배열에 대해서 사용할 수 있습니다. 그러나, 단위가 바이트이기 때문에 배열 요소의 자료형에 따라 세심한 주의가 필요합니다.
대부분의 배열은 초기 상태로 0을 갖습니다. 그래서, {} 초기화를 사용해서 모든 요소에 대해 0을 지정하도록 합니다. 그러나, {} 초기화는 배열을 선언할 때 한번만 사용할 수 있고, 이후에는 일일이 모든 요소에 대해 0을 넣어줘야 합니다. 이와 같이 모든 요소를 0으로 채울 때, 배열 종류에 상관없이 사용하는 함수가 memset()입니다.
'Daily Report' 카테고리의 다른 글
110705 함수포인터 반환형 / 포인터형 변수선언 / 문제 (0) | 2011.07.05 |
---|---|
110630 고수준 fprintf() fwrite() 차이 (0) | 2011.07.01 |
110627 저수준 입출력(p11-9) / grep / redirection / TCP/IP 서론 (0) | 2011.06.27 |
110624 파일입출력(고수준 저수준) (0) | 2011.06.24 |
110623 [C]fpopen(txt파일불러오기) / fprintf / fscanf (0) | 2011.06.24 |