현재 위치: > 최신 기사 목록> socket_connect 후 socket_set_block을 사용하기위한 올바른 자세

socket_connect 후 socket_set_block을 사용하기위한 올바른 자세

gitbox 2025-05-26

1. Socket_connect와 차단 모드의 관계

기본적으로 PHP의 소켓은 차단 모드에 있으므로 연결이 성공하거나 반환되지 않을 때까지 Socket_Connect 호출이 차단됩니다. 그러나 연결 후 후속 읽기 및 쓰기 작업이 차단 된 상태를 유지하려면 Socket_set_Block을 사용하여 명시 적으로 설정할 수 있습니다.

socket_connect 후에 socket_set_block을 호출해야합니다. 왜냐하면:

  • 연결하기 전에 차단 모드 설정 Socket_Connect 에 의해 재설정 될 수 있습니다.

  • 연결 후 설정을 통해 모든 후속 작업이 차단 모드에 있는지 확인합니다.


2. Socket_set_Block 에 올바른 호출의 예입니다

연결이 성공한 후 Socket_set_Block을 호출하는 방법을 보여주는 완전한 예는 다음과 같습니다.

 <?php
// a TCP socket
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
    die("socket_create 실패하다: " . socket_strerror(socket_last_error()) . "\n");
}

// 서버에 연결하십시오
$address = 'gitbox.net';
$port = 80;
if (!socket_connect($socket, $address, $port)) {
    die("socket_connect 실패하다: " . socket_strerror(socket_last_error($socket)) . "\n");
}

// 성공적인 연결 후,차단 모드를 설정하십시오
if (!socket_set_block($socket)) {
    die("socket_set_block 실패하다: " . socket_strerror(socket_last_error($socket)) . "\n");
}

// 지금 socket 차단되었습니다,읽기 및 쓰기 작업을 수행 할 수 있습니다
$request = "GET / HTTP/1.1\r\nHost: gitbox.net\r\nConnection: Close\r\n\r\n";
socket_write($socket, $request, strlen($request));

// 응답을 읽으십시오
$response = '';
while ($out = socket_read($socket, 2048)) {
    $response .= $out;
}

// 폐쇄 socket
socket_close($socket);

// 출력 응답
echo $response;
?>

3. 주목 할 포인트

  • Socket_connect가 연결 실패 후 설정을 피하기 위해 Socket_set_Block 이 호출되는지 확인하십시오.

  • socket_set_block 부울 값을 반환하고 실패하면 Socket_last_error를 통해 오류 메시지를 얻을 수 있습니다.

  • 연결하기 전에 socket_set_block을 호출하면 연결 중에 내부 통화로 덮어 쓰기가 잘못 차단 설정이 발생할 수 있습니다.

  • PHP의 기본 소켓 모드는 일반적으로 차단되지만 일부 시나리오 (예 : 이전에 호출 된 Socket_set_nonblock )에서는 차단으로 다시 재설정해야합니다.


요약하면, 차단 모드가 적용되도록하려면 Socket_Connect가 성공한 후 Socket_set_block을 호출하여 후속 읽기 및 쓰기 작업이 차단 방식으로 수행되도록하여 데이터를 읽을 수 없거나 비 블로킹 모드에서 쓰기 실패와 같은 일반적인 문제를 피하는 것입니다.