socket_create 
resource socket_create ( int $domain , int $type , int $protocol )
Tworzy gniazdo (punkt końcowy dla komunikacji
Parametry
- domain- parametr określa z jakiej rodziny jest protokół użyty przez gniazdo
- 
możliwe rodziny adresu/ptotokołu Domena opis AF_INET IPv4 oparty o protokoły internetowe. TCP i UDP są protokołami wspólnymi w tej rodzieni protokołów. AF_INET6 IPv6 oparty o protokoły internetowe. TCP i UDP są protokołami wspólnymi w tej rodzieni protokołów. Dla PHP 5.0.0. AF_UNIX Lokalny protokuł kominikacyjny rodziny. Wysoka wydajność i niski koszt sprawia że jest najlepszy z IPC (Komunikacja międzyprocesowa). 
-  
 type - ten parametr określa typ komunikacji użytej przez gniazdo
 - Możliwe typy gniazda - Typ - Opis - SOCK_STREAM - Zapewnia kolejność, niezawodność, strumieniowego połączenia. 
 Poza zespołem mechanizmu trnsmisji danyc może być wsparty.
 Protokuł TPC jest oparty na tym typie gniazda- SOCK_DGRAM - Obsługuje datagramy (bez połączenia, niewiarygodne wiadomości o określonej maksymalnej długości). Protkuł UDP jest oparty na gnieździe tego typu. - SOCK_SEQPACKET - Zapewnia kolejność, niezawodność, dwudrożne połączenie oparte o ścieżkę transmisji danyc dla datagramów o określonej maksymalnej długości - SOCK_RAW - Dostarcza surowy protokuł dostępu sieci. Ten specjalny typ gniazda moze być użyty ręcznie w każdym typie protokołu. 
 Często używany dla tego typu gniazda aby wykonaćżądanie ICMP (takie jeak ping, traceroute, itd).- SOCK_RDM - Dostarcza niezawodne datagramy, które nie gwarantują kolejności. Jest to najprawdopodobniej nie zaimplementowane w woim systemie 
-  
 protocol - Ten parametr ustawia określony protokuł wewnątrz określonej domeny użytej do komunikacji na zwróconym gnieździe.Prawidłowe wartości mogą być pobierane a pomocą nazwy użytej przez getprotobyname(). Jeśli pożądanym protokołem jest TPC, lub UPD odpowiednie stałe SOL_TCP i SOL_UDP mogą być również wykorzystywane.
 - Częste protokoły - Nazwa - Opis - icmp - Internetowy kontroler wiadomości protokołu jest używany głównie przez bramy i hostów datagramów raport błędów w komunikacji. Komenda "ping" jest przykładem aplikacji ICMP- udp - Datagramy protokołu użytkownika są używane bezpołączeniowo. Protokół ze stałą długością rekordów. 
 Ze względu na te aspekty, UDP wymaga minimalnej kwotyniepowtarzalnego protokołu.- tcp - Protokół kontroli transmisji jest wiarygodny, oparty o połączenie, zorientowany strumieniowo. 
 TCP gwarantuje, że wszystkie pakiety zostaną odebrane w takiej kolejności, w jakiej zostały wysłane. Jeśli jakiś pakiet zostanie utracony podczas komunikacji, TPC automatycznie retransmituje pakiet dopuki docelowy host nie przyzna pakietu. Dla wiarygodności i wydajności TPC podczas realizacji sam decyduje o odpowiednich granicach warstwy komunikacyjnej datagramuZatem TPC musi dopuczszać możliwość częściowej transmisji
Zwracane wartości
socket_create() zwraca zasób gniazda na succes lub FALSE
Listing
<?php
/// start ping.inc.php ///
$g_icmp_error = "No Error";
// timeout in ms
function ping($host, $timeout)
{
$port = 0;
$datasize = 64;
global $g_icmp_error;
$g_icmp_error = "No Error";
$ident = array(ord('J'), ord('C'));
$seq = array(rand(0, 255), rand(0, 255));
$packet = '';
$packet .= chr(8); // type = 8 : request
$packet .= chr(0); // code = 0
$packet .= chr(0); // checksum init
$packet .= chr(0); // checksum init
$packet .= chr($ident[0]); // identifier
$packet .= chr($ident[1]); // identifier
$packet .= chr($seq[0]); // seq
$packet .= chr($seq[1]); // seq
for ($i = 0; $i < $datasize; $i++)
$packet .= chr(0);
$chk = icmpChecksum($packet);
$packet[2] = $chk[0]; // checksum init
$packet[3] = $chk[1]; // checksum init
$sock = socket_create(AF_INET, SOCK_RAW, getprotobyname('icmp'));
$time_start = microtime();
socket_sendto($sock, $packet, strlen($packet), 0, $host, $port);
$read = array($sock);
$write = NULL;
$except = NULL;
$select = socket_select($read, $write, $except, 0, $timeout * 1000);
if ($select === NULL)
{
$g_icmp_error = "Zaznacz Error";
socket_close($sock);
return -1;
}
elseif ($select === 0)
{
$g_icmp_error = "Przekroczony czas";
socket_close($sock);
return -1;
}
$recv = '';
$time_stop = microtime();
socket_recvfrom($sock, $recv, 65535, 0, $host, $port);
$recv = unpack('C*', $recv);
if ($recv[10] !== 1) // ICMP proto = 1
{
$g_icmp_error = "nie ma pakietu ICMP";
socket_close($sock);
return -1;
}
if ($recv[21] !== 0) // ICMP odpowiedz = 0
{
$g_icmp_error = "Not ICMP response";
socket_close($sock);
return -1;
}
if ($ident[0] !== $recv[25] || $ident[1] !== $recv[26])
{
$g_icmp_error = "Zły numer identyfikacyjny";
socket_close($sock);
return -1;
}
if ($seq[0] !== $recv[27] || $seq[1] !== $recv[28])
{
$g_icmp_error = "Zły numer";
socket_close($sock);
return -1;
}
$ms = ($time_stop - $time_start) * 1000;
if ($ms < 0)
{
$g_icmp_error = "Odpowiedz zbyt długa";
$ms = -1;
}
socket_close($sock);
return $ms;
}
function icmpChecksum($data)
{
$bit = unpack('n*', $data);
$sum = array_sum($bit);
if (strlen($data) % 2) {
$temp = unpack('C*', $data[strlen($data) - 1]);
$sum += $temp[1];
}
$sum = ($sum >> 16) + ($sum & 0xffff);
$sum += ($sum >> 16);
return pack('n*', ~$sum);
}
function getLastIcmpError()
{
global $g_icmp_error;
return $g_icmp_error;
}
/// end ping.inc.php ///
?>
Dodano przez: igor  
Ranga: Administrator serwisu Punktów: 0
Ranga: Administrator serwisu Punktów: 0
Komentarze użytkowników
:: Losowe artykuły 

:: Wymiana linków 
    
	Modowe inspiracje |
        Android Gry i Aplikacje |
        ZaplanujTransport.pl: Przeprowadzki, transport, aukcje |
        Logo dla firmy |
        Change Tires - Car Weather Forecast Reminder |
        Laminas: MVC Framework for PHP |
        IT Books Reviews and Programming: JS, JAVA, PHP, ANDROID, CSS | 
        Katalog roślin |
        Programming articles: JAVA, PHP, C++, Python, JavaScript |
        Kancelaria Adwokacka Łukasz Huszno
        
    

 
  
				

 
                             
 


 
                        
 
		 
	