socket_recv

(PHP 4 >= 4.1.0, PHP 5, PHP 7)

socket_recvBağlı bir soketten veri alır

Açıklama

socket_recv ( resource $soket , string &$tampon , int $uzunluk , int $seçenekler ) : int

socket_recv() işlevi soket ile belirtilen soketten tampon içindeki uzunluk baytı okur. socket_recv() ayrıca, bağlantılı soketlerden veri toplama için de kullanılır. Buna ek olarak işlevin davranışlarında değişiklik yapmak için bir veya daha fazla sayıda seçenek belirtilebilir.

tampon gönderimli aktarılır, dolayısıyla işlevin değiştirgeleri arasında bir değişken olarak yer almalıdır. socket_recv() tarafından socket soketinden okunan veri tampon'a konarak döndürülür.

Değiştirgeler

socket

socket_create() ile oluşturulmuş geçerli bir soket özkaynağı.

tampon

Verinin alınacağı değişken burada belirtilir. Bir hata oluşursa, bağlantı kesilirse veya alınacak bir veri yoksa tampon içeriği olarak NULL atanır.

uzunluk

Okunacak azami bayt sayısını belirler.

seçenekler

Aşağıdaki seçeneklerin bitsel VEYAlanmış bir birleşimi.

Olası seçenekler
MSG_OOB Band dışı veri gönderilir.
MSG_EOR Bir kayıt imi belirtir. Gönderilen veri kaydın tamamlanmasını sağlar.
MSG_EOF Soketin gönderici tarafı kapatılır ve gönderilen verinin sonuna bununla ilgili bir bildirim yerleştirilir. Gönderilen veri aktarımın tamamlanmasını sağlar.
MSG_DONTROUTE Yönlendirme es geçilip doğrudan arabirim kullanılır.

Dönen Değerler

Bir hata oluşmuşsa FALSE yoksa alınan bayt sayısını döndürür. Oluşan hatanın kodu socket_last_error() ile açıklaması ise, elde edilen hata kodu socket_strerror() işlevine aktarılarak alınabilir.

Örnekler

Örnek 1 - socket_recv() örneği

Bu örnek, Örnekler arasında socket_recv() kullanan ilk örneğin yeniden yazılmışıdır.

<?php
error_reporting
(E_ALL);

echo 
"<h2>TCP/IP Bağlantısı</h2>\n";

/* HTTP hizmeti için portu öğrenelim. */
$service_port getservbyname('www''tcp');

/* Hedef konağın IP adresini alalım. */
$address gethostbyname('www.example.com');

/* Bir TCP/IP soketi oluşturalım. */
$socket socket_create(AF_INETSOCK_STREAMSOL_TCP);
if (
$socket === false) {
    echo 
"socket_create() başısız oldu: sebep: " .
    
socket_strerror(socket_last_error()) . "\n";
} else {
    echo 
"OK.\n";
}

echo 
"'$service_port' portundun '$address' adresine bağlanmaya çalışılıyor...";
$result socket_connect($socket$address$service_port);
if (
$result === false) {
    echo 
"socket_connect() başısız oldu:\nSebep: ($result) " .
    
socket_strerror(socket_last_error($socket)) . "\n";
} else {
    echo 
"OK.\n";
}

$in "HEAD / HTTP/1.1\r\n";
$in .= "Host: www.example.com\r\n";
$in .= "Connection: Close\r\n\r\n";
$out '';

echo 
"HTTP HEAD isteğini gönderelim...";
socket_write($socket$instrlen($in));
echo 
"OK.\n";

echo 
"Yanıtı okuyalım:\n\n";
$buf 'Bu bir veri tamponu verisidir.';
if (
false !== ($bytes socket_recv($socket$buf2048MSG_WAITALL))) {
    echo 
"Read $bytes bytes from socket_recv(). Closing socket...";
} else {
    echo 
"socket_recv() failed; reason: " .
    
socket_strerror(socket_last_error($socket)) . "\n";
}
socket_close($socket);

echo 
$buf "\n";
echo 
"OK.\n\n";
?>

Yukarıdaki örnek şuna benzer bir çıktı üretir:

<h2>TCP/IP Bağlantısı</h2>
OK.
'80' portundan '208.77.188.166' adresine bağlanmaya çalışılıyor...OK.
HTTP HEAD isteği gönderiliyor...OK.
Okunan yanıt:

Soket kapatıyor...HTTP/1.1 200 OK
Date: Mon, 14 Sep 2009 08:56:36 GMT
Server: Apache/2.2.3 (Red Hat)
Last-Modified: Tue, 15 Nov 2005 13:24:10 GMT
ETag: "b80f4-1b6-80bfd280"
Accept-Ranges: bytes
Content-Length: 438
Connection: close
Content-Type: text/html; charset=UTF-8

OK.