socket 프로그래밍 관련
함수명 | 원형 |
---|---|
socket | int socket(int family, int type, int protocol) |
bind | int bind(int sockfd, const struct sockaddr *my addr, socklen_t addrlen) |
listen | int listen(int sockfd, int backlog) |
accept | int accept(int sockfd, struct sockaddr *clientaddr, socklen_t *addrlen) |
connect | int connect(int sockfd, const struct sockaddr *serveraddr, socklen_t addrlen) |
read | ssize_t read(int fd, void *buff, size_t nbytes) |
write | ssize_t write(int fd, const void *buff, size_t nbytes) |
함수명 | 정의 (매개 변수) | 반환 값 | 사용처 |
---|---|---|---|
socket | 1. 소켓 생성을 위해 사용되는 함수 IPv4, Ipv6 도메인 선택 |
socket 실습
int main() {
int x = 1;
int listenfd = socket(AF_INET, SOCK_STREAM, 0);
struct sockaddr_in servaddr;
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(10000);
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
bind(listenfd, (struct sockaddr*) &servaddr, sizeof(servaddr));
listen(listenfd, 5);
int connfd = accept(listenfd, (struct sockaddr *) NULL, NULL);
write(connfd, "Hello", 6);
close(connfd);
printf("Server: All done");
return 0;
}
int listenfd = socket(AF_INET, SOCK_STREAM, 0)
struct sockaddr_in servaddr
servaddr.sin_family = AF_INET
servaddr.sin_port = htons(10000)
servaddr.sin_addr.s_addr = htonl(INADDR_ANY)
bind(listenfd, (struct sockaddr*) &servaddr, sizeof(servaddr))
htons() vs htonl() 비교
함수 | 변환 대상 | 크기 | 사용 예시 |
---|---|---|---|
htons() |
short (16비트, 2바이트) | 2B | 포트 번호 (sin_port ) |
htonl() |
long (32비트, 4바이트) | 4B | IP 주소 (sin_addr.s_addr ) |