ошибка сокета в send() Нет такого файла или каталога

if (fcntl (i4SockDesc, F_SETFL, O_NONBLOCK) < 0)
{
    printf(LDP_IF_MISC, "LDPTCP: Client : Can't Set Sckt in NON BLK\n");
    return CONNECT_FAIL;
}

i4RetVal = send (i4SockDesc, (UINT1 *) pu1Data, u2BufLen, MSG_NOSIGNAL);
if (i4RetVal != u2BufLen)
{
    perror("Socket send failure!!\n");
    printf(i4SockDesc = %d, u2BufLen = %d, i4RetVal = %d\n", i4SockDesc, u2BufLen, i4RetVal);
    printf("Socket send Failure: %s, errno = %d\n",strerror(errno), errno);
}

Вызов send() завершается с ошибкой "Нет такого файла или каталога" errno = 2.

i4SockDesc = 90, u2BufLen = 100, i4RetVal = -1
Socket send Failure: No such file or directory, errno = 2

person Community    schedule 17.05.2013    source источник
comment
Пожалуйста, проверьте stackoverflow. ком/вопросы/11631578/   -  person Denny Mathew    schedule 17.05.2013
comment
На этой странице рассказывается об ошибке подключения (). У меня возникают проблемы при попытке отправить данные. Мое подключение выполнено успешно. Также отправка выполняется нормально, но через некоторое время. Я начинаю сталкиваться с этой ошибкой   -  person    schedule 17.05.2013


Ответы (1)


Это еще не сбой, если send() на самом деле отправляет меньше байтов, чем запрошено. Я полагаю, что ваше errno произошло раньше.

Если i4RetVal < u2BufLen, вы должны просто продолжить отправку после продвижения вашего «курсора отправки» на i4RetVal и уменьшения длины буфера (лучше: длины для отправки) на ту же величину.

Продолжайте делать это до тех пор, пока вы действительно не отправите все.

Вы должны проверять наличие ошибок только в том случае, если i4RetVal < 0.

person glglgl    schedule 17.05.2013
comment
Я наблюдаю странное поведение. Вывод показывает, что иногда я получаю i4RetVal = -1, а в некоторых местах i4RetVal положителен, но все же меньше, чем u2BufLen. - person ; 17.05.2013
comment
Как сказано, i4RetVal положителен, но все же меньше, чем u2BufLen, что не странно — просто так бывает. - person glglgl; 17.05.2013