[c++] libuv의 네트워킹 기능
libuv는 Node.js의 이벤트 기반 및 비동기 I/O 라이브러리이지만 기본적인 네트워킹에 대한 기능도 제공합니다. libuv를 사용하여 네트워킹을 구현하는 방법에 대해 알아봅시다.
TCP 서버 만들기
libuv를 사용하여 TCP 서버를 만들려면 다음과 같이 작성할 수 있습니다.
#include <uv.h>
#include <iostream>
uv_tcp_t server;
void on_new_connection(uv_stream_t* server, int status) {
if (status < 0) {
std::cerr << "New connection error: " << uv_strerror(status) << std::endl;
return;
}
uv_tcp_t* client = (uv_tcp_t*)malloc(sizeof(uv_tcp_t));
uv_tcp_init(uv_default_loop(), client);
if (uv_accept(server, (uv_stream_t*)client) == 0) {
// 클라이언트와의 통신을 처리하는 코드
} else {
uv_close((uv_handle_t*)client, NULL);
}
}
int main() {
uv_loop_t* loop = uv_default_loop();
uv_tcp_init(loop, &server);
struct sockaddr_in addr;
uv_ip4_addr("0.0.0.0", 8888, &addr);
uv_tcp_bind(&server, (const struct sockaddr*)&addr, 0);
int r = uv_listen((uv_stream_t*)&server, 128, on_new_connection);
if (r) {
std::cerr << "Listen error: " << uv_strerror(r) << std::endl;
return 1;
}
return uv_run(loop, UV_RUN_DEFAULT);
}
위의 코드는 libuv를 사용하여 기본적인 TCP 서버를 만드는 예제입니다. uv_tcp_t
를 사용하여 새로운 TCP 서버를 초기화하고, uv_listen
함수를 사용하여 새로운 연결을 수락하고 처리합니다.
TCP 클라이언트 만들기
libuv를 사용하여 TCP 클라이언트를 만들려면 다음과 같이 작성할 수 있습니다.
#include <uv.h>
#include <iostream>
uv_tcp_t socket;
uv_connect_t connect_req;
void on_connect(uv_connect_t* req, int status) {
if (status < 0) {
std::cerr << "Connect error: " << uv_strerror(status) << std::endl;
return;
}
// 서버와의 통신을 처리하는 코드
}
int main() {
uv_loop_t* loop = uv_default_loop();
uv_tcp_init(loop, &socket);
uv_connect(&connect_req, &socket, (const sockaddr*)&server_addr, on_connect);
return uv_run(loop, UV_RUN_DEFAULT);
}
위의 코드는 libuv를 사용하여 기본적인 TCP 클라이언트를 만드는 예제입니다. uv_tcp_t
를 사용하여 새로운 TCP 소켓을 초기화하고, uv_connect
함수를 사용하여 서버에 연결합니다.
libuv를 사용하여 네트워킹 기능을 추가할 때 언급된 함수에 대한 더 자세한 정보는 libuv 공식 문서를 참조하시기 바랍니다.