개발자 Q&A

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

2025.04.30 22:29

socket_read 함수를 사용하여 데이터를 읽는 방법에 대해 질문합니다.

목록
  • 마이크로서비스연구가 3일 전 2025.04.30 22:29
  • 61
    1
저는 socket_read 함수를 사용하여 서버에서 데이터를 읽어오고 싶습니다. 하지만, 이 함수가 blocking 이며, connect timeout 이 발생할 경우 어떻게 처리해야 하는지 궁금합니다.

socket_read 함수는 데이터를 읽어올 때까지 대기하는 함수로, connect timeout 이 발생할 경우 어떻게 처리해야 하는지 알려주세요.

또한, socket_read 함수가 성공적으로 데이터를 읽어오지 못할 경우에 대한 에러 처리 방법을 알려주세요.

예를 들어, connect timeout 이 발생한 경우, socket_read 함수의 반환값은 어떻게 되며, 어떻게 에러를 처리할 수 있는지 알려주세요.

    댓글목록

    profile_image
    나우호스팅  3일 전



    socket_read 함수는 데이터를 읽어올 때까지 블로킹되며, connect timeout 이 발생할 경우 다음과 같이 처리할 수 있습니다.

    1. connect timeout 이 발생한 경우, socket_read 함수는 반환값이 FALSE 이며, errno 변수에 ETIMEDOUT (시간 초과) 오류가 설정됩니다.
    2. 에러 처리를 위해 try-catch 문을 사용할 수 있습니다. try 블록 내에서 socket_read 함수를 호출하고, catch 블록 내에서 에러를 처리할 수 있습니다.
    3. 예를 들어, connect timeout 이 발생한 경우, catch 블록 내에서 errno 변수를 확인하여 ETIMEDOUT 오류가 발생한 경우, 적절한 에러 메시지를 출력할 수 있습니다.

    #hostingforum.kr
    php
    
    try {
    
        $data = socket_read($sock, 1024);
    
    } catch (Exception $e) {
    
        if ($e->getCode() == socket_last_error()) {
    
            $errno = socket_last_error();
    
            if ($errno == ETIMEDOUT) {
    
                echo "connect timeout 발생n";
    
            } else {
    
                echo "기타 오류 발생n";
    
            }
    
        } else {
    
            echo "기타 오류 발생n";
    
        }
    
    }
    
    


    또한, socket_read 함수가 성공적으로 데이터를 읽어오지 못할 경우, 에러 처리를 위해 socket_last_error() 함수를 사용할 수 있습니다. 이 함수는 마지막으로 발생한 오류를 반환하며, socket_read 함수가 실패한 경우, ETIMEDOUT (시간 초과), ECONNRESET (연결이 끊어짐), ECONNREFUSED (연결이 거부됨) 등의 오류가 발생할 수 있습니다.

    #hostingforum.kr
    php
    
    try {
    
        $data = socket_read($sock, 1024);
    
    } catch (Exception $e) {
    
        $errno = socket_last_error();
    
        if ($errno == ETIMEDOUT) {
    
            echo "connect timeout 발생n";
    
        } elseif ($errno == ECONNRESET) {
    
            echo "연결이 끊어졌습니다.n";
    
        } elseif ($errno == ECONNREFUSED) {
    
            echo "연결이 거부되었습니다.n";
    
        } else {
    
            echo "기타 오류 발생n";
    
        }
    
    }
    
    

    2025-04-30 22:31

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

검색

게시물 검색