| Вопрос | Ответ |
|---|---|
struct FLAP { unsigned char m_id; //!< идентификатор (всегда равен 0x2A) unsigned char m_channel; //!< номер канала unsigned short m_seqNumber; //!< порядковый номер пакета unsigned short m_size; //!< размер пакета }; При чтении в эту структуру следующего дампа: 2a 01 54 6c 00 04 в поле “размер пакета” было не 4 а 1024. Т.е. два байта были переставлены местами. Почему? | В архитектуре х86 в памяти байты поменены местами. ntohs как раз для этого случая. |
| Можно ли перевести сокет из блокирующего в неблокирующий в процессе его работы, когда уже произошел connect |
bool setAsync(int h,bool isAsync)
{
int fl=fcntl(h,F_GETFL);
if(isAsync)
fl |= O_NONBLOCK;
else
fl &= ~O_NONBLOCK;
return 0==fcntl(h,F_SETFL,fl);
}
|
| Что будет, если я в конструктор к string дам const char * без нуля в конце? | <octofox> ж… будет, прости господи для таких случаев есть std::string(Iterator begin, Iterator end) |
| Как выполнить disconnect? | Всё банальное просто: man 2 shutdown |
| Можно ли закрытый сокет открыть заново, вызвав connect на другой ip:port? | Опытным путем полуил что нет: connect: : Transport endpoint is already connected |