Wicked
Новичок
Коннект неблокирующего сокета
Чото не пойму
Хочется сделать на винде неблокирующий коннект сокета... поставил такой эксперимент:
выводит такие коды:
10035
10037
... // много
10037
10022 // иногда этого нету, раз на раз не приходится
10056
Как вообще это делать правильно?
Как правильно понимать, когда стоит дожидаться таймаута (в будущем), а когда соединение уже гарантированно не установится (10022, казалось бы, как раз такой случай)?
Как правильно сделать в будущем кросс-платформенность?
В мануале ничего по теме не нашел.
Чото не пойму

Хочется сделать на винде неблокирующий коннект сокета... поставил такой эксперимент:
PHP:
$winsockCodes = array(
// Invalid Argument
// An invalid argument was passed to a function.
"WSAEINVAL" => 10022,
// Resource Temporarily Unavailable
// The specified socket operation cannot be completed immediately, but the operation should be retried later.
"WSAEWOULDBLOCK" => 10035,
// Socket is Already Connected
// A connect request was made on a socket that is already connected.
"WSAEISCONN" => 10056,
// Operation Already in Progress
// An operation was attempted on a non-binding socket that already had an operation in progress.
"WSAEALREADY" => 10037,
);
$sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_set_nonblock($sock);
do {
@socket_connect($sock,"api.facebook.com", 80);
$err = socket_last_error($sock);
echo $err, "\n";
} while($err !== $winsockCodes["WSAEISCONN"]);
10035
10037
... // много
10037
10022 // иногда этого нету, раз на раз не приходится
10056
Как вообще это делать правильно?
Как правильно понимать, когда стоит дожидаться таймаута (в будущем), а когда соединение уже гарантированно не установится (10022, казалось бы, как раз такой случай)?
Как правильно сделать в будущем кросс-платформенность?
В мануале ничего по теме не нашел.