#include <sys/socket.h>
int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
Accept a connection on a socket
▪ TCP Server에서만 사용할 수 있습니다.
▪ 연결 request이 도착할 때까지 머무릅니다.
▪ sockfd : 들어온 socket에 대해 file descriptor (socket type should be SOCK_STREAM)
▪ addr : client socket의 address로 채워질 sockaddr 구조체에 대한 pointer
▪ addrlen : client address의 실제 크기를 포함합니다.
▪ Return value
• Success: 들어온 socket에 대해 file descriptor (0보다 큰 값) • Error: -1
▪ Example
clnt_addr_size = sizeof(clnt_addr);
clnt_sock = accept(serv_sock, (struct sockaddr*)&clnt_addr, &clnt_addr_size);
if (clnt_sock == -1)
error_handling("accept() error");
이후부터는 client로 통신이 가능해집니다.
client의 connect() 함수로 server로 연결 request가 들어오게 됩니다.
리턴 값으로 client를 받습니다.
관련 내용입니다.
실제 code 단계에서는 accpet까지 도달해야지 return을 받아올 수 있습니다.
e.g.) - 어떤 경로로 이런 말씀을 하셨는지 기억은 나질 않지만 같은 페이지이므로 위의 내용을 말씀하시면서 들었던 것 같습니다.
HTTP의 경우 대게 80번 Port를 열어둔다.
TCP에 80 Port로 연결한다고 했을 때,
listen에서는 80이라는 Port에 Connection한 후 새로운 Port를 할당해줍니다.
이렇게 해주는 이유는 해당 서버에는 1명의 user만 이용하는 것이 아니기 때문에 새롭게 할당해준 Port로 Handling 해줍니다.
이렇게 되면 또다시 80번 Port를 통해 서버에 접근할 수 있게 됩니다.