Error recv соединение разорвано другой стороной

I'm having this strange error, CURL ERROR: Recv failure: Connection reset by peer This is how it happens, if I did not connect to the server and all of a sudden trying to connect to the server via...

I’m having this strange error, CURL ERROR: Recv failure: Connection reset by peer

This is how it happens, if I did not connect to the server and all of a sudden trying to connect to the server via CURL in PHP I get the error. When I run the CURL script again the error disappears and then works well the whole time, if I leave the remote server idle for about 30mins or reboot the remote server and try to connect again, I get the error again. So it seems like the connection is idle and then all of sudden the server wakes up and then works and then sleeps again.

This is how my CURL script looks.

$url = Yii::app()->params['pdfUrl'];
            $body = 'title='.urlencode($title).'&client_url='.Yii::app()->params['pdfClientURL'].'&client_id='.Yii::app()->params['pdfClientID'].'&content='.urlencode(htmlentities($content));

            $c = curl_init ($url);
            $body = array(
                "client_url"=>Yii::app()->params['pdfClientURL'],
                "client_id"=>Yii::app()->params['pdfClientID'],
                "title"=>urlencode($title),
                "content"=>urlencode($content)

            );
            foreach($body as $key=>$value) { $body_str .= $key.'='.$value.'&'; }
                rtrim($body_str,'&');

            curl_setopt ($c, CURLOPT_POST, true);
            curl_setopt ($c, CURLOPT_POSTFIELDS, $body_str);
            curl_setopt ($c, CURLOPT_RETURNTRANSFER, true);
            curl_setopt ($c, CURLOPT_CONNECTTIMEOUT , 0);
            curl_setopt ($c, CURLOPT_TIMEOUT  , 20);

            $pdf = curl_exec ($c);
            $errorCode = curl_getinfo($c, CURLINFO_HTTP_CODE);
            $curlInfo = curl_getinfo($c);
            $curlError = curl_error($c);

            curl_close ($c);

I’m totally out of ideas and solutions, please help, I’ll appreciate it!!!

If I verbose the output to see what happens using

curl_setopt ($c, CURLOPT_VERBOSE, TRUE);
curl_setopt($c, CURLOPT_STDERR, $fp); 

I get the following

* About to connect() to 196.41.139.168 port 80 (#0)
*   Trying 196.x.x.x... * connected
* Connected to 196.x.x.x (196.x.x.x) port 80 (#0)
> POST /serve/?r=pdf/generatePdf HTTP/1.1
Host: 196.x.x.x
Accept: */*
Content-Length: 7115
Content-Type: application/x-www-form-urlencoded
Expect: 100-continue

* Recv failure: Connection reset by peer
* Closing connection #0
012 20:23:49 GMT
< Server: Apache/2.2.15 (CentOS)
< X-Powered-By: PHP/5.3.3
< Connection: close
< Transfer-Encoding: chunked
< Content-Type: text/html; charset=UTF-8
< 
* Closing connection #0

I’ve added in the following toe remove the default header and still no luck:

curl_setopt ($c, CURLOPT_HTTPHEADER, array( 'Expect:' ) );

> Accept: */* Content-Length: 8414 Content-Type:
> application/x-www-form-urlencoded
> 
> * Recv failure: Connection reset by peer
> * Closing connection #0 r: Apache/2.2.15 (CentOS) < X-Powered-By: PHP/5.3.3 < Connection: close < Transfer-Encoding: chunked <
> Content-Type: text/html; charset=UTF-8 < 
> * Closing connection #0

I’m having this strange error, CURL ERROR: Recv failure: Connection reset by peer

This is how it happens, if I did not connect to the server and all of a sudden trying to connect to the server via CURL in PHP I get the error. When I run the CURL script again the error disappears and then works well the whole time, if I leave the remote server idle for about 30mins or reboot the remote server and try to connect again, I get the error again. So it seems like the connection is idle and then all of sudden the server wakes up and then works and then sleeps again.

This is how my CURL script looks.

$url = Yii::app()->params['pdfUrl'];
            $body = 'title='.urlencode($title).'&client_url='.Yii::app()->params['pdfClientURL'].'&client_id='.Yii::app()->params['pdfClientID'].'&content='.urlencode(htmlentities($content));

            $c = curl_init ($url);
            $body = array(
                "client_url"=>Yii::app()->params['pdfClientURL'],
                "client_id"=>Yii::app()->params['pdfClientID'],
                "title"=>urlencode($title),
                "content"=>urlencode($content)

            );
            foreach($body as $key=>$value) { $body_str .= $key.'='.$value.'&'; }
                rtrim($body_str,'&');

            curl_setopt ($c, CURLOPT_POST, true);
            curl_setopt ($c, CURLOPT_POSTFIELDS, $body_str);
            curl_setopt ($c, CURLOPT_RETURNTRANSFER, true);
            curl_setopt ($c, CURLOPT_CONNECTTIMEOUT , 0);
            curl_setopt ($c, CURLOPT_TIMEOUT  , 20);

            $pdf = curl_exec ($c);
            $errorCode = curl_getinfo($c, CURLINFO_HTTP_CODE);
            $curlInfo = curl_getinfo($c);
            $curlError = curl_error($c);

            curl_close ($c);

I’m totally out of ideas and solutions, please help, I’ll appreciate it!!!

If I verbose the output to see what happens using

curl_setopt ($c, CURLOPT_VERBOSE, TRUE);
curl_setopt($c, CURLOPT_STDERR, $fp); 

I get the following

* About to connect() to 196.41.139.168 port 80 (#0)
*   Trying 196.x.x.x... * connected
* Connected to 196.x.x.x (196.x.x.x) port 80 (#0)
> POST /serve/?r=pdf/generatePdf HTTP/1.1
Host: 196.x.x.x
Accept: */*
Content-Length: 7115
Content-Type: application/x-www-form-urlencoded
Expect: 100-continue

* Recv failure: Connection reset by peer
* Closing connection #0
012 20:23:49 GMT
< Server: Apache/2.2.15 (CentOS)
< X-Powered-By: PHP/5.3.3
< Connection: close
< Transfer-Encoding: chunked
< Content-Type: text/html; charset=UTF-8
< 
* Closing connection #0

I’ve added in the following toe remove the default header and still no luck:

curl_setopt ($c, CURLOPT_HTTPHEADER, array( 'Expect:' ) );

> Accept: */* Content-Length: 8414 Content-Type:
> application/x-www-form-urlencoded
> 
> * Recv failure: Connection reset by peer
> * Closing connection #0 r: Apache/2.2.15 (CentOS) < X-Powered-By: PHP/5.3.3 < Connection: close < Transfer-Encoding: chunked <
> Content-Type: text/html; charset=UTF-8 < 
> * Closing connection #0

у меня эта странная ошибка,ошибка CURL: ошибка Recv: сброс соединения одноранговым узлом

вот как это происходит, если я не подключался к серверу и вдруг пытаюсь подключиться к серверу через CURL в PHP, я получаю ошибку. Когда я снова запускаю сценарий CURL, ошибка исчезает, а затем работает хорошо все время, если я оставляю удаленный сервер в режиме ожидания около 30 минут или перезагружаю удаленный сервер и пытаюсь подключиться снова, я снова получаю ошибку. Так что кажется, что соединение простаивает, а затем внезапно сервер просыпается, а затем работает, а затем снова спит.

вот как выглядит мой сценарий CURL.

$url = Yii::app()->params['pdfUrl'];
            $body = 'title='.urlencode($title).'&client_url='.Yii::app()->params['pdfClientURL'].'&client_id='.Yii::app()->params['pdfClientID'].'&content='.urlencode(htmlentities($content));

            $c = curl_init ($url);
            $body = array(
                "client_url"=>Yii::app()->params['pdfClientURL'],
                "client_id"=>Yii::app()->params['pdfClientID'],
                "title"=>urlencode($title),
                "content"=>urlencode($content)

            );
            foreach($body as $key=>$value) { $body_str .= $key.'='.$value.'&'; }
                rtrim($body_str,'&');

            curl_setopt ($c, CURLOPT_POST, true);
            curl_setopt ($c, CURLOPT_POSTFIELDS, $body_str);
            curl_setopt ($c, CURLOPT_RETURNTRANSFER, true);
            curl_setopt ($c, CURLOPT_CONNECTTIMEOUT , 0);
            curl_setopt ($c, CURLOPT_TIMEOUT  , 20);

            $pdf = curl_exec ($c);
            $errorCode = curl_getinfo($c, CURLINFO_HTTP_CODE);
            $curlInfo = curl_getinfo($c);
            $curlError = curl_error($c);

            curl_close ($c);

Я полностью из идей и решений, пожалуйста, помогите, я буду признателен!!!

если я подробный вывод, чтобы увидеть, что происходит с помощью

curl_setopt ($c, CURLOPT_VERBOSE, TRUE);
curl_setopt($c, CURLOPT_STDERR, $fp); 

Я получаю следующее

* About to connect() to 196.41.139.168 port 80 (#0)
*   Trying 196.x.x.x... * connected
* Connected to 196.x.x.x (196.x.x.x) port 80 (#0)
> POST /serve/?r=pdf/generatePdf HTTP/1.1
Host: 196.x.x.x
Accept: */*
Content-Length: 7115
Content-Type: application/x-www-form-urlencoded
Expect: 100-continue

* Recv failure: Connection reset by peer
* Closing connection #0
012 20:23:49 GMT
< Server: Apache/2.2.15 (CentOS)
< X-Powered-By: PHP/5.3.3
< Connection: close
< Transfer-Encoding: chunked
< Content-Type: text/html; charset=UTF-8
< 
* Closing connection #0

Я добавил в следующем toe удалить заголовок по умолчанию и по-прежнему не повезло:

curl_setopt ($c, CURLOPT_HTTPHEADER, array( 'Expect:' ) );

> Accept: */* Content-Length: 8414 Content-Type:
> application/x-www-form-urlencoded
> 
> * Recv failure: Connection reset by peer
> * Closing connection #0 r: Apache/2.2.15 (CentOS) < X-Powered-By: PHP/5.3.3 < Connection: close < Transfer-Encoding: chunked <
> Content-Type: text/html; charset=UTF-8 < 
> * Closing connection #0

6 ответов


введение

удаленный сервер отправил вам первый пакет, который указывает на немедленное падение соединения, а не обычное рукопожатие.

Возможные Причины

А. TCP / IP

это может быть проблема TCP / IP, которую вам нужно решить с вашим хостом или обновить ОС в большинстве случаев соединение закрывается перед удаленным сервером, прежде чем он закончит загрузку содержимого в Connection reset by peer…..

Б. Каннель Ошибка

обратите внимание, что есть некоторые проблемы с масштабированием окна TCP на некоторых ядрах Linux после v2.6.17. Дополнительные сведения см. В следующих отчетах об ошибках:

https://bugs.launchpad.net/ubuntu/+source/linux-source-2.6.17/+bug/59331

https://bugs.launchpad.net/ubuntu/+source/linux-source-2.6.20/+bug/89160

С. PHP & CURL ошибка

вы используете PHP/5.3.3, который имеет ряд серьезных ошибок … я бы посоветовал вам работать с более новой версией PHP и CURL

https://bugs.php.net/bug.php?id=52828

https://bugs.php.net/bug.php?id=52827

https://bugs.php.net/bug.php?id=52202

https://bugs.php.net/bug.php?id=50410

Д. максимум Блок Передачи

одной из распространенных причин этой ошибки является то, что размер MTU (максимальная единица передачи) пакетов, перемещающихся по сетевому соединению, был изменен с значения по умолчанию 1500 байт.
Если вы настроили VPN это, скорее всего, должно быть изменено во время конфигурации

Д. Брандмауэр: iptables

если вы не знаете свой путь вокруг этих парней, они могут вызвать серьезные проблемы .. попробуйте получить доступ к сервер к которому вы подключаетесь, проверьте следующее

  • у вас есть доступ к порту 80 на этом сервере

пример

 -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT`
  • следующее В последней строке не перед любым другим ACCEPT

пример

  -A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited 
  • проверьте все падение, отклонить и убедитесь, что они не блокируют ваше соединение

  • временно разрешить все подключения, Как видите если он враг

эксперимент

попробуйте другой сервер или удаленный сервер (так много платного облачного хостинга онлайн) и протестируйте тот же сценарий .. если это сработает, то я думаю, что это так же хорошо, как правда … You need to update your system

Другие Связанные С Кодом

А. протокол SSL

если Yii::app()->params['pdfUrl'] — это URL-адрес с https не включая правильную настройку SSL также может вызвать эту ошибку в старой версии curl

разрешение: убедитесь, что OpenSSL установлен и включен, а затем добавьте это в свой код

curl_setopt($c, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($c, CURLOPT_SSL_VERIFYHOST, false);

надеюсь, это поможет


обычно эта ошибка означает, что соединение было установлено с сервером, но это соединение было закрыто удаленным сервером. Это может быть связано с медленным сервером, проблемой с удаленным сервером, сетевой проблемой или (возможно) какой-то ошибкой безопасности с отправкой данных на удаленный сервер, но я нахожу это маловероятным.

обычно сетевая ошибка разрешится сама по себе, если дать ей немного времени, но похоже, что вы уже дали ей немного времени.

скручиваемость иногда возникают проблемы с SSL и сертификаты SSL.
Я думаю, что ваш Apache и/или PHP был скомпилирован с последней версией библиотек Curl и curl SSL плюс я не думаю, что OpenSSL был установлен на вашем веб-сервере.

хотя я не могу быть уверен, однако, я считаю, что cURL исторически был flakey с сертификатами SSL, в то время как Open SSL этого не делает.

в любом случае, попробуйте установить Open SSL на сервере и повторите попытку, и это должно помочь вам избавиться от этого ошибка.


Итак, что такое URL-адрес, который Yii::app()->params['pdfUrl'] дает? Вы говорите, что это должен быть https, но журнал показывает, что он подключается к порту 80… который почти не настроен на сервер для приема https-соединений. cURL достаточно умен, чтобы знать, что https должен быть на порту 443… что предполагает, что Ваш URL-адрес имеет что-то шаткое в нем, как: https://196.41.139.168:80/serve/?r=pdf/generatePdf

это приведет к прекращению соединения, когда Apache на другом конце не сможет выполнить https-связь с вами на этом порт.

вы осознаете свой первый $body определение заменяется при установке $body в массив двумя строками позже? {Вероятно, это просто артефакт, который вы пытаетесь решить проблему} вы также не кодируете client_url и client_id значения (первые, вполне возможно, содержащие символы, которые нуждаются в экранировании!) О, и вы добавляете к $body_str без его инициализации.

из вашего подробного вывода мы видим, что cURL добавляет content-length заголовок, но… это правильно? Я вижу, что некоторые комментарии в интернете этого числа ошибочны (особенно с более старыми версиями)… если бы это число было небольшим (например), вы бы получили сброс соединения до отправки всех данных. Вы можете вручную вставить заголовок:

curl_setopt ($c, CURLOPT_HTTPHEADER, 
   array("Content-Length: ". strlen($body_str))); 

О, и есть удобная функция http_build_query это преобразует массив пар имя / значение в строку, закодированную URL для вас.

все это закатывается в финал код:

$post=http_build_query(array(
  "client_url"=>Yii::app()->params['pdfClientURL'],
  "client_id"=>Yii::app()->params['pdfClientID'],
  "title"=>$title,
  "content"=>$content));

//Open to URL
$c=curl_init(Yii::app()->params['pdfUrl']);
//Send post
curl_setopt ($c, CURLOPT_POST, true);
//Optional: [try with/without]
curl_setopt ($c, CURLOPT_HTTPHEADER, array("Content-Length: ".strlen($post))); 
curl_setopt ($c, CURLOPT_POSTFIELDS, $post);
curl_setopt ($c, CURLOPT_RETURNTRANSFER, true);
curl_setopt ($c, CURLOPT_CONNECTTIMEOUT , 0);
curl_setopt ($c, CURLOPT_TIMEOUT  , 20);
//Collect result
$pdf = curl_exec ($c);
$curlInfo = curl_getinfo($c);
curl_close($c);

это проблема брандмауэра, если вы используете приложение VMware, убедитесь, что брандмауэр антивируса выключен или разрешены подключения.

Если этот сервер находится в защищенной сети, ознакомьтесь с правилами брандмауэра сервера.

спасибо
Ганеш ПНС


в моем случае была проблема в URL. Я использую https://example.com — но они обеспечивают » www.- так, когда я переключился на https://www.example.com все было ок. Правильный заголовок был отправлен ‘Host: www.example.com’.

вы можете попробовать сделать запрос в firefox brwoser, сохранить его и скопировать как cURL-вот как я его нашел.


я столкнулся с той же ошибки, но по-другому.

когда вы сворачиваете страницу с определенным протоколом SSL.

curl --sslv3 https://example.com

Если —sslv3 не поддерживается целевым сервером, то ошибка будет

curl: (35) сброс TCP-соединения одноранговым узлом

с поддерживаемым протоколом ошибка исчезнет.

curl --tlsv1.2 https://example.com

I’m having this strange error, CURL ERROR: Recv failure: Connection reset by peer

This is how it happens, if I did not connect to the server and all of a sudden trying to connect to the server via CURL in PHP I get the error. When I run the CURL script again the error disappears and then works well the whole time, if I leave the remote server idle for about 30mins or reboot the remote server and try to connect again, I get the error again. So it seems like the connection is idle and then all of sudden the server wakes up and then works and then sleeps again.

This is how my CURL script looks.

$url = Yii::app()->params['pdfUrl'];
            $body = 'title='.urlencode($title).'&client_url='.Yii::app()->params['pdfClientURL'].'&client_id='.Yii::app()->params['pdfClientID'].'&content='.urlencode(htmlentities($content));

            $c = curl_init ($url);
            $body = array(
                "client_url"=>Yii::app()->params['pdfClientURL'],
                "client_id"=>Yii::app()->params['pdfClientID'],
                "title"=>urlencode($title),
                "content"=>urlencode($content)

            );
            foreach($body as $key=>$value) { $body_str .= $key.'='.$value.'&'; }
                rtrim($body_str,'&');

            curl_setopt ($c, CURLOPT_POST, true);
            curl_setopt ($c, CURLOPT_POSTFIELDS, $body_str);
            curl_setopt ($c, CURLOPT_RETURNTRANSFER, true);
            curl_setopt ($c, CURLOPT_CONNECTTIMEOUT , 0);
            curl_setopt ($c, CURLOPT_TIMEOUT  , 20);

            $pdf = curl_exec ($c);
            $errorCode = curl_getinfo($c, CURLINFO_HTTP_CODE);
            $curlInfo = curl_getinfo($c);
            $curlError = curl_error($c);

            curl_close ($c);

I’m totally out of ideas and solutions, please help, I’ll appreciate it!!!

If I verbose the output to see what happens using

curl_setopt ($c, CURLOPT_VERBOSE, TRUE);
curl_setopt($c, CURLOPT_STDERR, $fp); 

I get the following

* About to connect() to 196.41.139.168 port 80 (#0)
*   Trying 196.x.x.x... * connected
* Connected to 196.x.x.x (196.x.x.x) port 80 (#0)
> POST /serve/?r=pdf/generatePdf HTTP/1.1
Host: 196.x.x.x
Accept: */*
Content-Length: 7115
Content-Type: application/x-www-form-urlencoded
Expect: 100-continue

* Recv failure: Connection reset by peer
* Closing connection #0
012 20:23:49 GMT
< Server: Apache/2.2.15 (CentOS)
< X-Powered-By: PHP/5.3.3
< Connection: close
< Transfer-Encoding: chunked
< Content-Type: text/html; charset=UTF-8
< 
* Closing connection #0

I’ve added in the following toe remove the default header and still no luck:

curl_setopt ($c, CURLOPT_HTTPHEADER, array( 'Expect:' ) );

> Accept: */* Content-Length: 8414 Content-Type:
> application/x-www-form-urlencoded
> 
> * Recv failure: Connection reset by peer
> * Closing connection #0 r: Apache/2.2.15 (CentOS) < X-Powered-By: PHP/5.3.3 < Connection: close < Transfer-Encoding: chunked <
> Content-Type: text/html; charset=UTF-8 < 
> * Closing connection #0

Кодер

49 / 48 / 7

Регистрация: 10.10.2010

Сообщений: 229

1

07.09.2013, 22:22. Показов 2362. Ответов 9


Привет всем.
Хроника событий:
В сети имеются компьютеры a-сервер,b-клиент.
1. они соединяются через протокол TCP
2. ВНЕЗАПНО на компьютере b программа-клиент вылетает. Естественно, между ними соединение разорвалось.
ДВА РАЗВИТИЯ СОБЫТИЙ:
Первое:

3. тем временем сервер на компьютере а был заблокирован функцией recv.
ВОПРОС: Возвратит ли эта функция ноль при крэше программы-клиента или так и останется заблокированной?
Второе развитие событий:
3. тем временем сервер на компьютере а вызвал функцию send.
ВОПРОС: Возвратит ли эта функция ноль при крэше программы-клиента или отправит байты в пустоту?

Если знаете, прошу не пропускать эту тему мимо. Заранее спасибо.

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь



0



Programming

Эксперт

94731 / 64177 / 26122

Регистрация: 12.04.2006

Сообщений: 116,782

07.09.2013, 22:22

Ответы с готовыми решениями:

send, recv и close
Что будет, если сервер пошлет данные на accept сокет и сразу же закроет этот сокет? Сможет ли…

SOCKET: send(), recv()
Начал разбираться с сокетами и в самом начале застрял на элементарном, с функциями send и recv, в…

Send/recv on listener socket
После переведения сокета в режим прослушивания (bind, listen), возможны ли на нем операции…

Не могу разобраться с send и recv Winsock
Есть клиент и сервер, инициализация, подключение и тд. работают правильно, но send и recv нет.

9

567 / 198 / 70

Регистрация: 25.05.2012

Сообщений: 816

09.09.2013, 05:22

2

Цитата
Сообщение от n00b.vcxproj
Посмотреть сообщение

Привет всем.
ДВА РАЗВИТИЯ СОБЫТИЙ:
Первое:

3. тем временем сервер на компьютере а был заблокирован функцией recv.
ВОПРОС: Возвратит ли эта функция ноль при крэше программы-клиента или так и останется заблокированной?

Return value
If no error occurs, recv returns the number of bytes received and the buffer pointed to by the buf parameter will contain this data received. If the connection has been gracefully closed, the return value is zero.

0 возвращается только при корректном закрытии соединения другой стороной. Соответственно ответ — нет, в данном случае recv() не вернет 0.

Второе развитие событий:
3. тем временем сервер на компьютере а вызвал функцию send.
ВОПРОС: Возвратит ли эта функция ноль при крэше программы-клиента или отправит байты в пустоту?

Опять нет, send ничего не знает о том, приняты ли данные другой стороной.



0



Модератор

3352 / 2127 / 349

Регистрация: 13.01.2012

Сообщений: 8,290

09.09.2013, 09:30

3

Цитата
Сообщение от dmitry94
Посмотреть сообщение

1 — ответ — нет

думаю ответ — да — разве «If no error occurs» не заставит функцию завершится по факту разрыва соединения?

Цитата
Сообщение от dmitry94
Посмотреть сообщение

2 — ответ — нет

думаю ответ — да — сразу же вернет ошибку



0



567 / 198 / 70

Регистрация: 25.05.2012

Сообщений: 816

09.09.2013, 10:48

4

Цитата
Сообщение от vxg
Посмотреть сообщение

думаю ответ — да — разве «If no error occurs» не заставит функцию завершится по факту разрыва соединения?

Будет висеть до истечения таймаута. Откуда recv узнает, что соединение разорвалось, если клиент ничего не отправил, не данных, не информации, что он отваливается? recv будет тупо ждать данных, тут же простая логика.

думаю ответ — да — сразу же вернет ошибку

Если соединение уже разорвано (корректно) на момент вызова send(), то да.



0



Эксперт С++

2924 / 1273 / 114

Регистрация: 27.05.2008

Сообщений: 3,465

09.09.2013, 10:51

5

1. функция recv() вернет SOCKET_ERROR — возможно, по истечении таймаута. Какая именно ошибка произошла — можно уточнить функцией WSAGetLastError(). Однако надо учитывать, что в протоколе TCP функция recv() «вынимает» из сокета только те данные, которые реально успели прийти к моменту ее вызова, и ничего не знает о полном размере данных. Тут зависит от того, насколько быстро подсистема TCP зарегистрирует аварийный разрыв соединения.
2. Аналогично с функцией send(). Это протокол TCP, т.е. данные считаются «успешно переданными» только после получения подтверждения от принимающей стороны.



0



Модератор

3352 / 2127 / 349

Регистрация: 13.01.2012

Сообщений: 8,290

09.09.2013, 11:03

6

Цитата
Сообщение от dmitry94
Посмотреть сообщение

будет тупо ждать данных

если программа упала соединение будет разорвано и ОС уведомит об этом отправителя послав ему служебный пакет



0



567 / 198 / 70

Регистрация: 25.05.2012

Сообщений: 816

09.09.2013, 11:22

7

Цитата
Сообщение от vxg
Посмотреть сообщение

если программа упала соединение будет разорвано и ОС уведомит об этом отправителя послав ему служебный пакет

Это да, я просто не заметил, что в вопросе речь идет именно о падении программы.
В случае физического пропадания связи между клиентом и сервером recv не вернет управление. В любом случае нужно учитывать все эти моменты.



0



Модератор

3352 / 2127 / 349

Регистрация: 13.01.2012

Сообщений: 8,290

09.09.2013, 11:40

8

Цитата
Сообщение от dmitry94
Посмотреть сообщение

В случае физического пропадания связи между клиентом и сервером recv не вернет управление

думаю не совсем так. я конечно свечку не держал, но… ОС как-то там сама не догадается что шнур перерубили со всеми вытекающими?



0



567 / 198 / 70

Регистрация: 25.05.2012

Сообщений: 816

09.09.2013, 12:10

9

Цитата
Сообщение от vxg
Посмотреть сообщение

думаю не совсем так. я конечно свечку не держал, но… ОС как-то там сама не догадается что шнур перерубили со всеми вытекающими?

Догадается, но очень не сразу. Уже наступал на эти грабли.



0



Эксперт С++

2924 / 1273 / 114

Регистрация: 27.05.2008

Сообщений: 3,465

09.09.2013, 12:45

10

ОС, конечно же, догадается, что «шнур перерубили», но — спустя таймаут. Не сразу.



0



Понравилась статья? Поделить с друзьями:
  • Error registering this mod
  • Error registering runner failed
  • Error registering hosted class code 0x80040111
  • Error registering com application contact your support personnel for more information
  • Error registering appinfo mbean kafka