Пытаюсь освоить TCP/IP стек в составе PowerPac.
Создаю сокет SocketData аналогично приведенным примерам, используя функции socket, bind, listen, access. Далее принимаю данные:
while (1) { Timeout = 30000; setsockopt(SocketData, SOL_SOCKET, SO_RCVTIMEO, &Timeout, sizeof(Timeout)); NumBytes = recv(SocketData, (char*)ac, 100, 0); // Принимаем по возможности 100 байт if (NumBytes <= 0) // Ошибка!!! { // Получаем код ошибки getsockopt(SocketData, SOL_SOCKET, SO_ERROR, &Error, sizeof(Error)); if (Error == ETIMEDOUT) { printf("recv() timeout after %d seconds of inactivity!\n", Timeout/1000); break; } } }
Передающая сторона, передав данные, закрывает соединение. Вопрос в том, как мне об этом узнать? В отладчике я вижу, что когда данные кончаются, recv всегда возвращает 0 и никогда не возвращает -1. Error всегда 0, ошибка по тайм-ауту не возникает. Как быть? Как отследить закрытие соединения со стороны передатчика?
|