Сокет send () застрял в C - PullRequest
       11

Сокет send () застрял в C

4 голосов
/ 27 июля 2011

Я пытаюсь соединить две машины, скажем, машины A и B. Я пытаюсь отправить TCP-сообщение от A до B (в одну сторону). В нормальном сценарии это работает нормально. Когда связь гладкая, если сокет в B закрыт, send () из A застрянет навсегда. И это ставит процесс в состояние зомби. У меня есть сокет в заблокированном режиме на машине А. Ниже приведен код, который застрял навсегда.

           if (send (txSock,&txSockbuf,sizeof(sockstruct),0) == -1) {
                printf ("Error in sending the socket Data\n");
                            }
            else {
                printf ("The SENT String is %s \n",sock_buf);
            }

Как мне узнать, закрыта ли розетка на другой стороне ?? Что возвращает send, если целевой сокет закрыт? Выбрал бы быть полезным.

1 Ответ

7 голосов
/ 27 июля 2011

Процесс в состоянии "зомби" означает, что он уже завершился, но его родительский еще не прочитал свой код возврата. Вероятно, происходит то, что ваш процесс получает сигнал SIGPIPE (это то, что вы получите по умолчанию при записи в закрытый сокет), ваша программа уже завершена, но состояние зомби еще не разрешено.

Этот связанный вопрос дает больше информации о SIGPIPE и о том, как с ним обращаться: SIGPIPE, Broken pipe

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