1. header
#include <sys/socket.h>
2. function
int accept(int socket, struct sockaddr *addr, socklen_t *addrlen);
1) int socket : listen()으로 클라이언트의 접속요청을 받고있는 소켓
2) struct sockaddr *addr : 클라이언트 주소정보를 가지고 있는 sockaddr 구조체 포인터
3) socketlen_t *addrlen : addr 포인터가 가르키는 구조체의 크기
4) return :
성공 | 실패 |
클라이언트와의 통신 소켓 디스크립터 | -1 |
3. 사용
#include <stdio.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <errno.h>
#define PORT 80
int main()
{
int sock = socket(AF_INET, SOCK_STREAM, 0);
int conn;
struct sockaddr_in addr, clientAddr;
socklen_t len = sizeof(addr);
addr.sin_family = AF_INET;
addr.sin_port = htons(PORT);
addr.sin_addr.s_addr = htonl(INADDR_ANY);
if(bind(sock, (struct sockaddr*)&addr, len) == -1){
fprintf(stderr, "Bind Error : %s\n", strerror(errno));
close(sock);
return(-1);
}else printf("bind\n");
if (listen(sock, 5) == -1) {
printf("listen fail\n");
}
while (1) {
conn = accept(sock, (struct sockaddr*)&clientAddr, &len);
close(conn);
}
}
'공부 > LinuxServer' 카테고리의 다른 글
[Linux Server] Node.js로 TCP 에코 서버 구현하기 (+ 방화벽 설정, 포트 열기) (0) | 2020.09.14 |
---|---|
6. 정보를 주고 받기 - send(), recv() (0) | 2019.07.02 |
4. 클라이언트에서 서버에 연결 요청하기 - connect() (0) | 2019.06.06 |
3. 클라이언트의 접속요청 확인하기 - listen() (0) | 2019.05.30 |
2. 소켓에 정보 지정하기 - bind() (0) | 2019.04.26 |