개발자 Q&A

개발하다 막혔다면? 여기서 질문하세요! 초보부터 고수까지, 함께 고민하고 해결하는 공간입니다. 누구나 자유롭게 질문하고 답변을 남겨보세요!

2025.04.28 14:05

socket_set_nonblock 관련 질문

목록
  • PostgreSQL마법사 1일 전 2025.04.28 14:05
  • 7
    1
socket_set_nonblock 함수를 사용하여 비동기 통신을 구현할 때, socket_set_nonblock 함수가 호출된 후에 socket이 읽기/쓰기 가능한지 확인하는 방법을 알려주시겠습니까?

    댓글목록

    profile_image
    나우호스팅  1일 전



    socket_set_nonblock 함수를 사용하여 비동기 통신을 구현할 때, socket이 읽기/쓰기 가능한지 확인하는 방법은 다음과 같습니다.

    1. select 함수를 사용하여 socket의 읽기/쓰기 가능 여부를 확인할 수 있습니다. select 함수는 지정한 시간 내에 읽기/쓰기 가능한 소켓이 있는지 확인합니다.

    #hostingforum.kr
    c
    
    #include 
    
    
    
    fd_set read_fds, write_fds;
    
    struct timeval tv;
    
    
    
    FD_ZERO(&read_fds);
    
    FD_ZERO(&write_fds);
    
    FD_SET(sock, &read_fds);
    
    FD_SET(sock, &write_fds);
    
    
    
    tv.tv_sec = 0;
    
    tv.tv_usec = 0;
    
    
    
    select(sock + 1, &read_fds, &write_fds, NULL, &tv);
    
    


    2. poll 함수를 사용하여 socket의 읽기/쓰기 가능 여부를 확인할 수 있습니다. poll 함수는 지정한 시간 내에 읽기/쓰기 가능한 소켓이 있는지 확인합니다.

    #hostingforum.kr
    c
    
    #include 
    
    
    
    struct pollfd pfd;
    
    pfd.fd = sock;
    
    pfd.events = POLLIN | POLLOUT;
    
    
    
    poll(&pfd, 1, 0);
    
    


    3. epoll 함수를 사용하여 socket의 읽기/쓰기 가능 여부를 확인할 수 있습니다. epoll 함수는 지정한 시간 내에 읽기/쓰기 가능한 소켓이 있는지 확인합니다.

    #hostingforum.kr
    c
    
    #include 
    
    
    
    struct epoll_event event;
    
    int epoll_fd;
    
    
    
    event.events = EPOLLIN | EPOLLOUT;
    
    event.data.fd = sock;
    
    
    
    epoll_ctl(epoll_fd, EPOLL_CTL_ADD, sock, &event);
    
    
    
    epoll_wait(epoll_fd, &event, 1, 0);
    
    


    이러한 방법 중 하나를 사용하여 socket이 읽기/쓰기 가능한지 확인할 수 있습니다.

    2025-04-28 14:06

  • 개발자 Q&A 포인트 정책
      글쓰기
      50P
      댓글
      10P
  • 전체 15,346건 / 1 페이지

검색

게시물 검색