PHP 8.1.0 RC 2 available for testing

socket_bind

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

socket_bindSoketi bir isimle ilişkilendirir

Açıklama

socket_bind(Socket $soket, string $adres, int $port = 0): bool

Belirtilen Socket nesnesini adres'teki bir isimle ilişkilendirir. Bu işlem, socket_connect() veya socket_listen() işlevlerini kullanarak bir bağlantı oluşturulmadan önce yapılmalıdır.

Değiştirgeler

soket

socket_create() ile oluşturulmuş geçerli bir Socket nesnesi.

adres

Soket, AF_INET türündeyse noktalı dördül gösterimle (127.0.0.1 gibi) geçerli bir IPv4 adresi, AF_INET6 türündeyse ve IPv6 desteği varsa geçerli bir IPv6 adresi (::1 gibi) olmalıdır.

Soket, AF_UNIX türündeyse Unix ailesinden bir soketin dosya yolu (/var/run/daemon.sock gibi) olmalıdır.

port (seçimlik)

Bu değiştirge sadece ve zorunlu olarak bir AF_INET veya AF_INET6 soketle ilişkilendirme sırasında gerekir ve bağlantının yapılacağı uzak konak üzerinde dinlenen bir portu belirtir.

Dönen Değerler

Başarı durumunda true, başarısızlık durumunda false döner.

Hata kodu socket_last_error() işlevi ile alınabilir. Bu hata kodunu socket_strerror() işlevine aktararak hatayı açıklayan dizgeyi alabilirsiniz.

Sürüm Bilgisi

Sürüm: Açıklama
8.0.0soket artık bir Socket örneği olabiliyor; evvelce resource türündeydi.

Örnekler

Örnek 1 - Kaynak adresini belirtmek için socket_bind() kullanımı

<?php
// Yeni bir soket oluştur
$sock socket_create(AF_INETSOCK_STREAMSOL_TCP);

// IP adreslerini makine sahibine göre tanımla
$sourceips['kevin']    = '127.0.0.1';
$sourceips['madcoder'] = '127.0.0.2';

// Soketi kaynak adresiyle ilişkilendir
socket_bind($sock$sourceips['madcoder']);

// Hedef adrese bağlan
socket_connect($sock'127.0.0.1'80);

// Veriyi gönder
$request 'GET / HTTP/1.1' "\r\n" .
           
'Host: example.com' "\r\n\r\n";
socket_write($sock$request);

// Soketi kapat
socket_close($sock);

?>

Notlar

Bilginize:

Bu işlev socket_connect() işlevinden önce çağrılmalıdır.

Bilginize: Windows 9x/ME uyumluluk bilgisi:

Soketi makinenize ait olmayan bir adresle ilişkilendirmeye çalışırsanız socket_last_error() işlevi geçersiz bir hata kodu döndürebilir.

Ayrıca Bakınız

add a note add a note

User Contributed Notes 6 notes

up
8
dresende at thinkdigital dot pt
9 years ago
Regarding previous post:

"0" has address is no different from "0.0.0.0"

127.0.0.1 -> accept only from local host
w.x.y.z (valid local IP) -> accep only from this network
0.0.0.0 -> accept from anywhere
up
12
keksov[at]gmx.de
19 years ago
If you want to reuse address and port, and get rid of error: unable to bind, address already in use, you have to use socket_setopt (check actual spelling for this function in you PHP verison) before calling bind:

<?php
if (!socket_set_option($sock, SOL_SOCKET, SO_REUSEADDR, 1)) {
    echo
socket_strerror(socket_last_error($sock));
    exit;
}
?>

This solution was found by
Christophe Dirac. Thank you Christophe!
up
3
php50613160534 dot 3 dot korkman at spamgourmet dot org
16 years ago
Use 0 for port to bind a random (free) port for incoming connections:

socket_bind ($socket, $bind_address, 0);
socket_getsockname($socket, $socket_address, $socket_port);
socket_listen($socket);
...

$socket_port contains the assigned port, you might want to send it to a remote client connecting. Tested with php 5.03.
up
2
gasket at cekkent dot net
18 years ago
The aforementioned tidbit about using NULL to bind to all addresses did not work for me, as I would receive an error about unknown address. Using a 0 worked for me:

socket_bind ($socket, 0, $port)

This also allows you to receive UDP broadcasts, which is what I had been trying to figure out.
up
-2
gabriel at plenitech dot fr
8 years ago
When doing Unix sockets, it might be necessary to chmod the socket file so as to give Write permission to Group and/or Others. Otherwise, only the owner is allowed to write data into the stream.

Example:

<?php
$sockpath
= '/tmp/my.sock';
socket_bind($socket, $sockpath);
//here: write-only (socket_send) to others, only owner can fetch data.
chmod($sockpath, 0702);
?>
up
-11
Mex
10 years ago
It appears for the $address parameter:

'127.0.0.1'
accepts clients from localhost (eg. 127.0.0.1)

'0.0.0.0'
accepts clients from localhost, and the server's network (eg. 127.0.0.1, 192.168.2.5, 10.20.30.40)

'0' or 0
accepts clients from localhost, the server's network, and external networks (eg. 127.0.0.1, 192.168.2.5, 10.20.30.40, 209.85.169.99)
To Top