Prototype |
Return value |
Parameter |
The role of function |
int
socket(int domain, |
양의 정수 : socket descriptor |
domain :
PF_INET: protocol type SOCK_RAW : raw(ICMP) |
새로운 소켓을 만들 때 쓰이며, 반드시 return 값을 가지고 있어야 한다. Return 값은 추후 소켓을 구별 하는대 쓰인다. 이 함수는 bind() or connect()와 함께 쓰인다. |
int close(int socket) |
0 : 소켓 종료가 정상적으로 이뤄짐 |
socket :
socket()에서 만들어진 |
소켓을 종료할 때 쓰이며, 상당시간 동안 |
int bind(int
socket, |
0 : bind를 성공했을 경우 |
socket :
socket()의 return 값 |
서버 프로그램이 |
int listen(int socket, int queuesize) |
0 : 성공했을 경우 |
socket :
socket()에 의핸 return 된 socket descriptor |
생성된 소켓이 client의 연결을 기다리는 함수 및 |
int
accept(int socket, |
-1 : 실패했을 경우 |
socket : socket()의 return 값 |
Queue에 들어있는 처음 연결을 추출하는 함수, 만약 queue가 비어있다면 blocking이 된다. |
int
connect(int socket, |
0 : 성공했을 경우 |
Socket :
socket()의 return 값 |
Socket을 다른 socket을 연결한다. |
int send(int
socket, const char* data |
-1 : 실패했을 경우 |
Socket() : accept()에서 만들어진 descriptor |
상대방 프로그램에게 데이터를 송신한다. |
int recv(int
socket, char*data, |
Buffer에 읽힌 byte의 수 |
Socket :
accept()에서 만들어진 descriptor |
Protocol(i.e
: TCP) buffer에 읽는 byte를 읽는 함수이다. |
int sendto(int socket, char* data, Lint length,
int flags, |
the # of byte
: 성공했을 경우 |
socket :
accept()의 return 값 length : data의 길이 |
Datagram 스타일의 전송방식으로써(datagram socket은 다른 remote host를 보지 못한다) 패킷을 전송하고 |
int
recvform(int socket, char*data, lint length, int flags, |
Buffer에 읽힌 byte의 수 |
socket :
accept()의 return 값 length : data의 길이 |
Sendto()의 형식과 같으며, 단지 receive() 를 하는 |
int
setsockopt(int socket, int level, |
0 : 성공했을 경우 |
Socket :
socket()의 반환값 SO_SNDTIME - 송수신 함수 타임아웃 IP_HDRINCL – 헤더 포함 전송
|
생성된 소켓의 옵션을 설정하는 함수이다. Parameter의 level 과 opt에 따라 결과 값이 바뀌게 된다. |
int
getsockopt(int socket, int level, |
0 : 성공했을 경우 -1: 실패했을 경우 |
setsockopt() 함수와 기본적으로 옵션이 같으며 |
소켓옵션을 확인하기 위한 함수이며, optval의 값을 읽어드리며, 포인터로 지정한 변수에 그 값이 읽히게 된다. |
struct hostent *gethostbyname(const char *name) |
Struct
hostent : 성공 했을 경우 |
name : domain명을 적으면 된다. |
도메인의 이름을 (ie. naver.com) 네트워크 바이트로 |
struct hostent *gethostbyaddr(const char *addr, int len, int type)
|
Struct
hostent : 성공 했을 경우 |
addr : IP의 주소 |
이진수 IP주소를 도메인 이름으로 바꿔준다. 기본적인 개념은 gethostbyname()함수와 같다. |
char
*inet_ntoa(struct in_addr in); int
inet_aton(const char *cp, |
inet_ntoa() |
in : struct
in_addr의 값(ip주소를 담고 있는 구조체) |
Number ->
address, address -> number |
in_addr_t inet_addr(const char *cp);
|
주소 정보를 가지고 있는 |
cp : address의 문자열 |
기본적으로 inet_aton() 함수와 같으며, 매우 오래된 method로 잘 쓰이지 않는다. |
struct servent *getservbyname( const char *name, const char *proto)
|
servent 구조체가 반환되며, 만약 proto의 값이 NULL일 경우 protocol이 match되는 servent 구조체가 반환된다. 0 : 실패할경우 0을 반환한다 |
name : servce의 이름을 쓴다(program) |
Parameter로 주어진 이름과 프로토콜이 match되는 |
struct servent *getservbyport(int port, const char *proto);
|
servent 구조체가 반환되며, 만약 proto의 값이 NULL일 경우 protocol이 match되는 servent 구조체가 반환된다. 0 : 실패할경우 0을 반환한다 |
port : 원하는 port #를 쓴다.
기본적인 parameter는 getservbyname()과 같다. |
Paramter로 주어진 port와 proto가 매치되는 service정보를 찾아서 그 정보를 servent 구조체로 반환하는 함수이다. |
uint32_t htonl(uint32_t hostlong); uint16_t htons(uint16_t hostshort); uint32_t ntohl(uint32_t netlong); uint16_t ntohs(uint16_t netshort);
|
각 함수는 변환된 값을 반환한다. |
hostlong
: host의 long type의 데이터 |
h : host를 의미한다 to :
converting을 의미한다 host byte order로부터 network byte order를 multi-byte integer type형식으로 변환한다. (역도 성립한다, vice versa)
이 함수는 hardware의 호환성 때문에 만들어 졌는데, 각 시스템 마다 각기 다른식으로 byte order를 저장하기 때문에 port # 및 숫자를 네트워크로 전송 했을 경우 위 함수들을 써야한다. |
struct for network-programming(네트워크 프로그래밍을 위한 구조체)
1.
struct sockaddr
{
u_short sa_family; /* address family */
char sa_data[14]; /* 주소(IP 주소 + 포트 번호) */
};
2.
struct in_addr /* sockaddr_in 안에 정의되어 있음에 유의하자 */
{
u_long s_addr; /* 32비트의 IP 주소를 저장할 구조체 */
}
3.
struct sockaddr_in
{
short
sin_family;
/* 주소 체계 */
u_short
sin_port; /* 16비트 포트 번호 */
struct in_addr sin_addr; /* 32비트 IP 주소 */
char
sin_zero[8]; /* 전체 크기를 16바이트로 맞추기 위한 dummy */
}
4. struct hostent
{
char *h_name /* host 이름 */
char **h_aliases /* aliases(별명?)의 list 값, 마지막 요소는 항상 NULL이다 */
int h_addrtype /* address 형식 AF_INET은 인터넷 주소 체계이다 */
int length /* address 의 길이, byte단위 이다 */
char **h_addr_list /* IP주소의 list들이 있으며, struct in_addr*을 가리키는 pointer이다.
}
5.
struct servent
{
char *s_name; /* 공식적인 service 이름*/
char **s_aliases; /* alias(별명?) list */
int s_port; /* port 번호 */
char
*s_proto; /* 사용하고 있는protocol */
}
'Programming > Network Programming' 카테고리의 다른 글
.. no regret.. (0) | 2011.10.26 |
---|---|
The example of one server that sends a client ID (0) | 2011.10.15 |
get client IPadrress in server side (0) | 2011.10.10 |
TCP/IP (0) | 2011.09.21 |
The concept of TCP/IP part 1. (2) | 2011.09.07 |