The keyword continue simply skips the current iteration of the loop. Of course you don't wanna continue the process of responding to the client if part of this process failed.
do we have to call function "write" each time we respond to client?
Per the man pages of write (section 2)
ssize_t write(int fd, const void *buf, size_t count); DESCRIPTION write() writes up to count bytes from the buffer pointed buf to the file referred to by the file descriptor fd.
In the distribution code, there are 3 arguments passed to write (i.e., cfd, body, and size). This basically means that write writes size bytes from body into cfd.
The first argument, cfd, represents the file descriptor that represents the connection between your program (the web server) and your client (e.g., the browser, telnet, etc.). Execute man 2 write in the terminal for more information about this function!