socket_last_error

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

socket_last_errorSoket üzerindeki son hatanın kodunu döndürür

Açıklama

socket_last_error(?Socket $soket = null): int

İşlev soket bağımsız değişkeni belirtilerek kullanılırsa belirtilen soket üzerinde son oluşan hatanın kodu döndürülür. Bir Socket nesnesi belirtilmezse başarısız olan son işlemle ilgili hata numarası döner. İşlev, bir hata durumunda bir Socket nesnesi döndürmeyen socket_create() ve belli bir soketle doğrudan ilişkili olmayan bir sebeple başarısız olabilen socket_select() gibi işlevler için de yararlıdır. Elde edilen hata kodunu socket_strerror() işlevinde kullanarak hatanın açıklamasına içeren bir dizge almak mümkündür.

Hiç hata oluşmamışsa veya hata socket_clear_error() ile temizlenmişse, işlev 0 döndürür.

Bağımsız Değişkenler

soket

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

Dönen Değerler

Bir soket hata kodu döner.

Sürüm Bilgisi

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

Örnekler

Örnek 1 - socket_last_error() örneği

<?php
$socket
= @socket_create(AF_INET, SOCK_STREAM, SOL_TCP);

if (
$socket === false) {
$errorcode = socket_last_error();
$errormsg = socket_strerror($errorcode);

die(
"Soket oluşturulamadı: [$errorcode] $errormsg");
}
?>

Notlar

Bilginize:

socket_last_error() hata kodunu temizlemez, bunun için socket_clear_error() işlevini kullanın.

add a note add a note

User Contributed Notes 2 notes

up
12
ca at php dot spamtrak dot org
15 years ago
This is a bit long, but personally I prefer to use the standard C defines in my code.

<?php

define
('ENOTSOCK',      88);    /* Socket operation on non-socket */
define('EDESTADDRREQ'89);    /* Destination address required */
define('EMSGSIZE',      90);    /* Message too long */
define('EPROTOTYPE',    91);    /* Protocol wrong type for socket */
define('ENOPROTOOPT',   92);    /* Protocol not available */
define('EPROTONOSUPPORT', 93);  /* Protocol not supported */
define('ESOCKTNOSUPPORT', 94);  /* Socket type not supported */
define('EOPNOTSUPP',    95);    /* Operation not supported on transport endpoint */
define('EPFNOSUPPORT'96);    /* Protocol family not supported */
define('EAFNOSUPPORT'97);    /* Address family not supported by protocol */
define('EADDRINUSE',    98);    /* Address already in use */
define('EADDRNOTAVAIL', 99);    /* Cannot assign requested address */
define('ENETDOWN',      100);   /* Network is down */
define('ENETUNREACH',   101);   /* Network is unreachable */
define('ENETRESET',     102);   /* Network dropped connection because of reset */
define('ECONNABORTED'103);   /* Software caused connection abort */
define('ECONNRESET',    104);   /* Connection reset by peer */
define('ENOBUFS',       105);   /* No buffer space available */
define('EISCONN',       106);   /* Transport endpoint is already connected */
define('ENOTCONN',      107);   /* Transport endpoint is not connected */
define('ESHUTDOWN',     108);   /* Cannot send after transport endpoint shutdown */
define('ETOOMANYREFS'109);   /* Too many references: cannot splice */
define('ETIMEDOUT',     110);   /* Connection timed out */
define('ECONNREFUSED'111);   /* Connection refused */
define('EHOSTDOWN',     112);   /* Host is down */
define('EHOSTUNREACH'113);   /* No route to host */
define('EALREADY',      114);   /* Operation already in progress */
define('EINPROGRESS',   115);   /* Operation now in progress */
define('EREMOTEIO',     121);   /* Remote I/O error */
define('ECANCELED',     125);   /* Operation Canceled */
?>
up
0
divinity76 at gmail dot com
5 years ago
note that socket_last_error() cache the last error from the last socket syscall, it does not actually query the OS for the last error on the socket, so if an async socket have an error after the last async operation started successfully, socket_last_error() doesn't know about it, but  socket_get_option($sock, SOL_SOCKET, SO_ERROR) actually query the OS, or so it seems... observed on PHP 7.1.16 on Cygwin on win7 x64 SP1 with non-blocking sockets, socket_last_error() never caught on to the fact that the current error had changed from EINPROGRESS (non-blocking connect) to 0 (connection successful)
To Top