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.
(PHP 4 >= 4.3.0, PHP 5, PHP 7, PHP 8)
socket_get_option — Soketle ilgili bir seçeneğin değerini döndürür
Belirtilen soket
için ismi
seçenek
ile belirtilen seçeneğin değerini döndürür.
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
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 |
Hata durumunda false
yoksa belirtilen seçeneğin değerini döndürür.
Sürüm: | Açıklama |
---|---|
8.0.0 | soket artık bir
Socket örneği olabiliyor; evvelce
resource türündeydi. |
Ö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));
?>
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.
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).
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.
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;
}
}
?>