PHP Conference Nagoya 2025

socket_get_option

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

socket_get_optionSoketle ilgili bir seçeneğin değerini döndürür

Açıklama

socket_get_option(Socket $soket, int $seviye, int $seçenek): array|int|false

Belirtilen soket için ismi seçenek ile belirtilen seçeneğin değerini döndürür.

Bağımsız Değişkenler

soket

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

seviye

Seçeneğin geçerli olacağı protokol seviyesi. Örneğin soket seviyesindeki seçenekleri almak için bu bağımsız değişkende SOL_SOCKET kullanılabilirdi. TCP gibi diğer seviyeler, seviyenin protokol numarası belirtilerek kullanılabilir. Protokol numaralarını getprotobyname() işleviyle alabilirsiniz.

seçenek
Olası soket seçenekleri
Seçenek Açıklama Türü
SO_DEBUG Hata ayıklama bilgilerinin kaydelip kaydedilmeyeceğini belirtir. int
SO_BROADCAST Yayın iletilerinin aktarılılp aktarılmayacağını belirtir. int
SO_REUSEADDR Yerel adresin yeniden kullanılabilir olup olmadığını belirtir. int
SO_REUSEPORT Yerel portların yeniden kullanılabilir olduğunu belirtir. int
SO_KEEPALIVE Belirli aralıklarla ileti aktarımlarında bağlantının kalıcı olup olmayacağını belirtir. Eğer bağlı soket bu iletileri yanıtlamakta başarısız olursa bağlantı kopar ve sokete yazan sürece bir SIGPIPE sinyali gönderilir. int
SO_LINGER

Veri mevcut olduğunda socket_close() işlevinin bekletilip bekletilmeyeceğini belirtir. Öntanımlı olarak soket kapatılacağı zaman gönderilmemiş tüm veri gönderilmeye çalışılır. Soketin bağlantı yönelimli olduğu durumda socket_close() karşı ucun alındısını bekler.

Eğer l_onoff sıfırdan farklı ve l_linger sıfırsa gönderilmemiş tüm veri iptal edilir ve soketin bağlantı yönelimli olması durumunda karşı uca bir RST (sıfırla) gönderilir.

Diğer taraftan, l_onoff ve l_linger'in ikisi de sıfırdan farklıysa tüm veri gönderilinceye veya l_linger ile belirtilen süre dolana kadar socket_close() bekletilir. Soket engellenmeyen kipte ise socket_close() başarısız olup bir hata döndürür.

array. Dizi iki anahtar içerir: l_onoff ve l_linger.
SO_OOBINLINE Soketin band dışı veriyi hatta bırakıp bırakmayacağını belirtir. int
SO_SNDBUF Gönderim tamponunun boyunu belirtir. int
SO_RCVBUF Alım tamponunun boyunu belirtir. int
SO_ERROR Hata durumu hakkında bilgi verip hata kodunu siler. int (socket_set_option() ile atanamayabilir.)
SO_TYPE Soketin türünü belirtir (SOCK_STREAM gibi). int (socket_set_option() ile atanamayabilir.)
SO_DONTROUTE Giden iletilerin standart yönlendirme oluşumlarını es geçip geçmeyeceğini belirtir. int
SO_RCVLOWAT Soket girdi işlemlerinde işlenecek en küçük bayt sayısını belirtir. int
SO_RCVTIMEO Soket girdi işlemleri için zaman aşımı değerini belirtir. array. Dizi iki anahtar içerir: Zaman aşımının saniye parçası sec, mikrosaniye parçası usec anahtarına konur.
SO_SNDTIMEO Akış denetiminin veri gönderimini engellemesi nedeniyle bir çıktı işlevinin bekletileceği azami süreyi belirtir. array. Dizi iki anahtar içerir: Zaman aşımının saniye parçası sec, mikrosaniye parçası usec anahtarına konur.
SO_SNDLOWAT Soket çıktı işlemlerinde işlenecek en küçük bayt sayısını belirtir. int
TCP_NODELAY Nagle TCP algoritmasının iptal edilmiş olup olmadığını belirtir. int
MCAST_JOIN_GROUP Çok noktaya yayın grubuna katılır. array. IPv4 veya IPv6 çok noktaya yayın adresi içeren "group" anahtarlı ve "eth0" gibi arabirim adını veya int türünde bir arabirim numarası (arabirimin yönlendirme kuralları kullanılarak seçilmesi gerektiğini belirtmek için 0 belirtilebilir) içeren "interface" anahtarlı bir dizi Sadece socket_set_option() işlevinde kullanılabilir.
MCAST_LEAVE_GROUP Çok noktaya yayın grubunu terkeder. array. Daha fazla bilgi için bkz: MCAST_JOIN_GROUP Sadece socket_set_option() işlevinde kullanılabilir.
MCAST_BLOCK_SOURCE Evvelce bağlanılmış olması gereken belli bir çok noktaya yayın grubuna belli bir kaynaktan gelen paketleri engeller. array. MCAST_JOIN_GROUP seçeneğindeki anahtarlara ek olarak source anahtarına da sahip bir dizi. source anahtarı, engellenen IPv4 veya IPv6 kaynak adresini belirten bir dizge içerir. Sadece socket_set_option() işlevinde kullanılabilir.
MCAST_UNBLOCK_SOURCE Evvelce bağlanılmış olması gereken belli bir çok noktaya yayın grubuna belli bir kaynaktan gelen paketlerin engellemesini kaldırır (yeniden almaya başlar). array. MCAST_BLOCK_SOURCE ile aynı biçemde bir dizi. Sadece socket_set_option() işlevinde kullanılabilir.
MCAST_JOIN_SOURCE_GROUP Kaynak adresi belli bir değerle eşleşen belli bir çok noktaya yayın grubunu hedefleyen paketleri alır. array. MCAST_BLOCK_SOURCE ile aynı biçemde bir dizi. Sadece socket_set_option() işlevinde kullanılabilir.
MCAST_LEAVE_SOURCE_GROUP Kaynak adresi belli bir değerle eşleşen belli bir çok noktaya yayın grubunu hedefleyen paketlerin alımını durdurur. array. MCAST_BLOCK_SOURCE ile aynı biçemde bir dizi. Sadece socket_set_option() işlevinde kullanılabilir.
IP_MULTICAST_IF IPv4 çok noktaya yayın giden paketleri için arabirim. int veya string. Arabirim numarasını içeren int türünde bir değer veya eth0 gibi arabirim adını içeren string türünde bir değer. Arabirim seçiminde yönlendirme tablosunun kullanılacağını ifade etmek için 0 değeri belirtilebilir. socket_get_option() işlevi bir arabirim indisi döndürür. C API'sinin tersine bu seçenek bir IP adresi almaz. Bu, IP_MULTICAST_IF ile IPV6_MULTICAST_IF arasındaki farkın yoksayılmasını sağlar.
IPV6_MULTICAST_IF IPv6 çok noktaya yayın giden paketleri için arabirim. int veya string. IP_MULTICAST_IF ile aynı.
IP_MULTICAST_LOOP IPv4 paketleri için çok noktaya yayın geridönüş ilkesi, daha önce katılmış olması gereken giden çok noktaya yayınların geridönüşünü etkinleştirir veya devre dışı bırakır. Bununla birlikte, etki, unix'lerde ve Windows'ta uygulamada farklılık gösterir; farklılık unix'lerde alma yolunda, Windows'ta ise gönderme yolundadır. int. (0 ya da 1). socket_set_option() işlevi için kabul edilebilir veya uygun PHP kurallarıyla mantıksal bir değere dönüştürülebilir herhangi bir değer.
IPV6_MULTICAST_LOOP IPv6 için olması dışında IP_MULTICAST_LOOP ile benzer. int. Bkz: IP_MULTICAST_LOOP.
IP_MULTICAST_TTL Giden IPv4 çok noktaya yayın paketleri için yaşam süresi. 0 (arabirimi bırakma) ile 255 arasında bir değer. Öntanımlı değer 1'dir (sadece yerel ağa ulaşılır). int. 0 ile 255 arası bir tamsayı.
IPV6_MULTICAST_HOPS IPv6 için olması dışında IP_MULTICAST_TTL ile benzer. Ayrıca, öntanımlı yol kullanılacak anlamında -1 de kabul edilir. int. -1 ile 255 arası bir tamsayı.
SO_MARK Linux'ta' paketleri süzme amacıyla soket üzerinde bir tanıtıcı tanımlar. int
SO_ACCEPTFILTER FreeBSD/NetBSD'de dinlenen sokete kabul süzgeci ekler. FreeBSD'de kabul süzgecinin çekirdek modülü önceden yüklenmelidir (örn, accf_http). string name of the filter (length 15 max).
SO_USER_COOKIE FreeBSD'de paketleri süzmek amacıyla soket üzerinde bir tanıtıcı tanımlar. int
SO_RTABLE OpenBSD'de paketleri süzmek amacıyla soket üzerinde bir tanıtıcı tanımlar. int
SO_DONTTRUNC Okunmamış veriler korunur. int
SO_WANTMORE Daha fazla veri hazır olduğunda bir ipucu verilir. int
TCP_DEFER_ACCEPT Veri hazır olana kadar dinleme soketi uyarılmaz. int
SO_INCOMING_CPU Soketin CPU benzerliğini tanımlar. int
SO_MEMINFO Soketin tüm meminfo'ları. int
SO_BPF_EXTENSIONS Sokete eklenecek çekirdek tarafından desteklenen BPF uzantıları. int
SO_SETFIB Soketin route tablosunu (FIB) tanımlar. (Yalnızca FreeBSD) int
SOL_FILTER Bir sokete atfedilen süzgeçler. (Yalnızca Solaris/Illumos) int
TCP_KEEPCNT TCP'nin bağlantıyı kesmeden önce göndermesi gereken azami canlı tutma sondalarının sayısını tanımlar. int
TCP_KEEPIDLE Bağlantının boşta kalması için gereken süreyi ayarlar. int
TCP_KEEPINTVL Bağımsız canlı tutma sondaları arasındaki süreyi tanımlar. int
TCP_KEEPALIVE Bağlantının boşta kalması için gereken süreyi ayarlar (Yalnızca macOS). int
TCP_NOTSENT_LOWAT Soket akımı tarafından yazma kuyruğundaki gönderilmemiş veri sayısının sınırını tanımlar (Yalnızca Linux) int

Dönen Değerler

Hata durumunda false yoksa belirtilen seçeneğin değerini döndürür.

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 - socket_get_option() örneği

<?php
$socket
= socket_create_listen(1223);

$linger = array('l_linger' => 1, 'l_onoff' => 1);
socket_set_option($socket, SOL_SOCKET, SO_LINGER, $linger);

var_dump(socket_get_option($socket, SOL_SOCKET, SO_REUSEADDR));
?>

Ayrıca Bakınız

add a note

User Contributed Notes 4 notes

up
5
Chad Lavoie
13 years ago
If using Unix Sockets, and you want to use SO_PEERCRED, you can use the number 17 for the optname (and SOL_SOCKET for the level). The PID of the connecting process will be returned.
up
3
recycling dot sp dot am at gmail dot com
14 years ago
Just 2 notes here:
- On UNIX, If SO_DEBUG is set, the php program needs an effective user id of 0.
- activating SO_OOBINLINE on a socket is equivalent to passing MSG_OOB flag to each recieving functions used with that socket (eg: socket_recv, socket_recvfrom).
up
1
prennings at gmail dot com
10 years ago
I was playing around with this option to use multiply socket connections with same hostname and same port (IRC). However the socket function needed for this is SO_REUSEPORT.

Though the majority of linux distro's does not have that yet officially implented in there distro's.

However for debian there is an patch that can be installed to get it working:

https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=c617f398edd4db2b8567a28e899a88f8f574798d

it has some work but I got it working after a while (Noobie in debian) maybe some other people are facing the same problem as I was.
up
0
skydiablo at gmx dot net
2 years ago
to receive UDP DHCP packets on a dedicated interface, you have to use the undocumented option SO_BINDTODEVICE:

<?php
$socket
= socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);

socket_set_option($socket, SOL_SOCKET, SO_BINDTODEVICE, 'eth1');
socket_set_option($socket, SOL_SOCKET, SO_BROADCAST, 1);
socket_set_option($socket, SOL_SOCKET, SO_REUSEADDR, 1);
socket_set_option($socket, SOL_SOCKET, SO_REUSEPORT, 1);

socket_bind($socket, '255.255.255.255', 67);
while (
1) {
if (
$src = @socket_recv($socket, $data, 9999, 0)) {
echo
$data . PHP_EOL;
}
}
?>
To Top