Skip to content

Instantly share code, notes, and snippets.

@jc-lab
Last active July 8, 2021 03:05
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jc-lab/e8bc7cbc30292b7430381d84759ebbf2 to your computer and use it in GitHub Desktop.
Save jc-lab/e8bc7cbc30292b7430381d84759ebbf2 to your computer and use it in GitHub Desktop.
uvw 테스트

코드

서버

$ nc -l -p 1234

클라이언트

#include <memory>
#include <string>
#include <iostream>
#include <uvw/loop.h>
#include <uvw/tcp.h>
#include <uvw/timer.h>

int main() {
  std::shared_ptr<uvw::Loop> loop(uvw::Loop::getDefault());

  auto tcp = loop->resource<uvw::TCPHandle>();
  tcp->once<uvw::ConnectEvent>([](auto& evt, auto& handle) -> void {
    std::cout << "ConnectEvent" << std::endl;
    handle.read();
  });
  tcp->on<uvw::ErrorEvent>([](auto& evt, auto& handle) -> void {
    std::cout << "ErrorEvent " << evt.what() << " : " << evt.name() << std::endl;
  });
  tcp->once<uvw::CloseEvent>([](auto& evt, auto& handle) -> void {
    std::cout << "CloseEvent " << std::endl;
  });
  tcp->once<uvw::EndEvent>([](auto& evt, auto& handle) -> void {
    std::cout << "EndEvent " << std::endl;
    handle.close();
  });
  tcp->on<uvw::DataEvent>([](auto& evt, auto& handle) -> void {
    std::cout << "DataEvent " << evt.length << std::endl;
  });
  tcp->on<uvw::WriteEvent>([](auto& evt, auto& handle) -> void {
    std::cout << "WriteEvent " << std::endl;
  });
  tcp->connect("127.0.0.1", 1234);

  auto timer = loop->resource<uvw::TimerHandle>();
  timer->on<uvw::TimerEvent>([tcp](auto& evt, auto& handle) -> void {
    std::cout << "TimerEvent " << std::endl;
//    tcp->shutdown();
    tcp->close();
    handle.close();
  });
  timer->start(std::chrono::milliseconds { 2000 }, std::chrono::milliseconds { 0 });

  loop->run();

  return 0;
}

테스트

연결 실패

  • ErrorEvent connection refused : ECONNREFUSED
  • <루프 종료>

정상 연결 (EndEvent에서 close 호출 안함)

  • ConnectEvent
  • DataEvent 12
  • DataEvent 8
  • <서버측에서 연결 끊음>
  • EndEvent
  • <루프 종료>

정상 연결 (EndEvent에서 close 호출)

  • ConnectEvent
  • DataEvent 12
  • DataEvent 8
  • <서버측에서 연결 끊음>
  • EndEvent
  • CloseEvent
  • <루프 종료>

정상 연결 (Client 측에서 shutdown 호출)

  • ConnectEvent
  • TimerEvent (shutdown 호출)
  • EndEvent
  • CloseEvent
  • <루프 종료>

정상 연결 (Client 측에서 close 호출)

  • ConnectEvent
  • TimerEvent
  • CloseEvent
  • <루프 종료>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment