Re[30]: TCP IP очередь запросов...
От: CrystaX Россия https://crystax.me/
Дата: 20.05.05 14:02
Оценка:
Здравствуйте, -Cheese-, Вы писали:

CX>> // Тут нужно особое внимание обратить на byte order. Если у тебя архитектура little-endian,

CX>> // а значение высылается в сетевом порядке байт, то ntohs обязательна
CX>> // short здесь в предположении что sizeof(short) == 2

C>приложение будет запускаться на 2000 винде

C>компилятор VC++

Важно не это, а то, в каком виде данные передает другая сторона.
... << RSDN@Home 1.1.4 beta 7 rev. 447>>
Re[29]: TCP IP очередь запросов...
От: -Cheese-  
Дата: 24.05.05 06:05
Оценка:
Здравствуйте, CrystaX, если вы не против продолжим...:

CX>Нет, не так. Вот примерный код, как это должно выглядеть:

CX>
CX>bool process_data(SOCKET sock)
CX>{
CX>    int received = 0, required = 2;
CX>    while((received = recv(sock, buf + received, required - received, 0)) > 0);
CX>    if(received == SOCKET_ERROR) return false;

CX>    // Тут нужно особое внимание обратить на byte order. Если у тебя архитектура little-endian,
CX>    // а значение высылается в сетевом порядке байт, то ntohs обязательна
CX>    // short здесь в предположении что sizeof(short) == 2
CX>    short size = ntohs(*reinterpret_cast<short *>(buf));
    
CX>    required = size;
CX>    received = 0;
CX>    while((received = recv(sock, buf + received, required - received, 0)) > 0); 
CX>    if(received == SOCKET_ERROR) return false;
    
CX>    buf[size] = '\0';
CX>    pushToStack(buf, size);
CX>    return true;
CX>}
CX>


может я чего-то не понял, но по ходу функции в выделенном месте всегда получается, что received == SOCKET_ERROR
... << RSDN@Home 1.1.4 beta 7 rev. 447>>
Re[30]: TCP IP очередь запросов...
От: CrystaX Россия https://crystax.me/
Дата: 24.05.05 06:21
Оценка:
Здравствуйте, -Cheese-, Вы писали:

C>может я чего-то не понял, но по ходу функции в выделенном месте всегда получается, что received == SOCKET_ERROR


Обрати внимание на ntohs. Быть может, ее вызов здесь не нужен. Могу предположить такую ситуацию: данные передаются в little-endian виде, а ntohs их переворачивает. Впоне может получиться ситуация с отрицательным size. Тогда возможно возвращение SOCKET_ERROR. Других причин не вижу. Хотя, конечно, это может быть и наведенная ошибка. Не могу гадать.
... << RSDN@Home 1.1.4 beta 7 rev. 447>>
Re[31]: TCP IP очередь запросов...
От: -Cheese-  
Дата: 24.05.05 07:02
Оценка:
Здравствуйте, CrystaX, Вы писали:

CX>Обрати внимание на ntohs. Быть может, ее вызов здесь не нужен. Могу предположить такую ситуацию: данные передаются в little-endian виде, а ntohs их переворачивает. Впоне может получиться ситуация с отрицательным size. Тогда возможно возвращение SOCKET_ERROR. Других причин не вижу. Хотя, конечно, это может быть и наведенная ошибка. Не могу гадать.


размер совпадает с передаваемым сообщением, смотрел..
... << RSDN@Home 1.1.4 beta 7 rev. 447>>
Re[32]: TCP IP очередь запросов...
От: CrystaX Россия https://crystax.me/
Дата: 24.05.05 07:06
Оценка:
Здравствуйте, -Cheese-, Вы писали:

C>Здравствуйте, CrystaX, Вы писали:


CX>>Обрати внимание на ntohs. Быть может, ее вызов здесь не нужен. Могу предположить такую ситуацию: данные передаются в little-endian виде, а ntohs их переворачивает. Впоне может получиться ситуация с отрицательным size. Тогда возможно возвращение SOCKET_ERROR. Других причин не вижу. Хотя, конечно, это может быть и наведенная ошибка. Не могу гадать.


C>размер совпадает с передаваемым сообщением, смотрел..


Ну тогда ищи, что еще сказать. Отладчик тебе в руки и вперед! А я не телепат. Угадать, что там происходит, не могу.
... << RSDN@Home 1.1.4 beta 7 rev. 447>>
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.