Предположим, у меня есть сокет, который я создал системным вызовом socket()
. После этого я сделал connect()
и начал отправлять и получать данные.Ошибка при отправке()/recv(). Где стоит розетка?
Точно так же, с другой стороны, сокет был создан при помощи системного вызова socket()
, а затем bind()
, listen()
и accept()
были названы. Затем эта сторона также начала общаться.
Теперь давайте предположим, что один из send()
(и соответственно recv()
с другой стороны) терпит неудачу.
Что я хочу, где бы эта розетка стояла после сбоя?
Общаться снова, я должен снова создать сокет и сделать connect()
(bind()
, listen()
и accept()
на другой стороне), или я могу попробовать send()
и recv()
снова? И дополнительно, что лучше всего делать в таком сценарии?
ПРИМЕЧАНИЕ: Мы не знаем, что является причиной send()
/recv()
на провал. Это может быть что угодно: от физического прорыва провода до другой стороны, отказавшегося (возможно, используя iptables).
Тогда восстановление из сломанной сети приведет к проверке всех возвращаемых значений, а затем шагов, которые необходимо предпринять соответственно? – Haris
@Haris Тот, который вы, скорее всего, хотите проверить, это если 'send' возвращает -1 и' errno' является 'ECONNRESET'. Для любого другого значения следует повторить попытку. – dbush
Хорошо. Благодарю. Это помогло. – Haris