Open mywnajsldkf opened 1 year ago
Linux 환경에서 well-known 포트(0~1023)를 사용하기 위해 root 권한이 필요하다. +) 만약 포트번호를 1023 아래로 지정하고 실행하면 자동으로 포트번호를 1024보다 크게 변경해준다.
Linux 환경에서 well-known 포트(0~1023)를 사용하기 위해 root 권한이 필요하다. +) 만약 포트번호를 1023 아래로 지정하고 실행하면 자동으로 포트번호를 1024보다 크게 변경해준다.
0 ~ 1023 : well-known port번호 영역입니다. 이 영역의 port번호는 UNIX/LINUX에서 root 권한으로만 port를 열 수 있습니다. 예약영역이라고 보면 됩니다.
1024 ~ 49151번: 등록된 포트 (registered port) 이 영역은 주로 서버 소켓으로 사용하는 영역입니다.
49152 ~ 65535번 : 동적 포트(dynamic port) 이 영역은 client가 connect(2)시 또는 bind(2)없이 server socket을 생성했어 listen(2)할 경우에 자동으로 할당되는 영역입니다. server socket에서 자동할당하면, client에게 할당된 port번호를 알릴방법이 있어야하기 때문에 서버 소켓은 prot번호를 정합니다.
TODO
csapp.c
rio_readn 식별자 fd의 현재 파일 위치에서 메모리 위치 usrbuf로 최대 n바이트를 전송한다.
/*
* rio_readn - Robustly read n bytes (unbuffered)
*/
/* $begin rio_readn */
ssize_t rio_readn(int fd, void *usrbuf, size_t n)
{
size_t nleft = n;
ssize_t nread;
char *bufp = usrbuf;
while (nleft > 0) {
if ((nread = read(fd, bufp, nleft)) < 0) {
if (errno == EINTR) /* Interrupted by sig handler return */
nread = 0; /* and call read() again */
else
return -1; /* errno set by read() */
}
else if (nread == 0)
break; /* EOF */
nleft -= nread;
bufp += nread;
}
return (n - nleft); /* Return >= 0 */
}
rio_writen usrbuf에서 식별자 fd로 n바이트로 전송한다.
/*
* rio_writen - Robustly write n bytes (unbuffered)
*/
/* $begin rio_writen */
ssize_t rio_writen(int fd, void *usrbuf, size_t n)
{
size_t nleft = n;
ssize_t nwritten;
char *bufp = usrbuf;
while (nleft > 0) {
if ((nwritten = write(fd, bufp, nleft)) <= 0) {
if (errno == EINTR) /* Interrupted by sig handler return */
nwritten = 0; /* and call write() again */
else
return -1; /* errno set by write() */
}
nleft -= nwritten;
bufp += nwritten;
}
return n;
}
/* $end rio_writen */
계산기 창 만들기
-> 계산기 더 예쁘게 만들 것! 😻
int sscanf(const char str, const char format, ...);
버퍼에서 형식화된 자료형을 읽어오는 함수를 사용하여 자료형을 읽어왔다.
first=5&second=3
를 sscanf(buf, "first=%d&second=%d", &n1, &n2);
사용하면
n1 = 5, n2 = 3을 얻을 수 있다.
https://eastroot1590.tistory.com/entry/CC-sscanf-sscanfs
TODO
if (strcasecmp(method, "GET") == 0)
사용하여 들어온 Method를 확인한다.
⚙ 기능 개요
✅ Implement TODO
숙제
👾 실행 결과
tiny
addr 구현
⭐️ 보완할 점
숙제 11.7
숙제 11.10