Здравствуйте, stbzh, Вы писали:
S>А точно подвисает на accept? Я бы предположил, что ты некорректно закрываешь соединение на клиенте и и з-за этого recv блокируется. Если это винда и все навтройки выстроены по умолчанию (не изменено время ожидания и соединение не отслеживает таймаут), то несколько минут винда будет думать, что соединение живое и recv не вернет 0.
Сервер под Debian etch4, клиент под Windows XP, связь через локалку. Настройки везде умолчальные. Сервер на 99% висит в accept — я логи после каждого действия в cout вывожу (выше я их постирал, чтоб не засоряли код). Да, такая деталь — сервер крутится не в основном потоке программы, а в отдельно созданном параллельном main'у.
Я и сам подозреваю, что проблема в клиенте, но вот где именно?..
Вот код клиента:
pSocket = new CSocket();
CString Str;
Str = "192.168.0.22";
int nPort = 3425;
pSocket->Create(nPort, SOCK_STREAM, NULL);
pSocket->Connect(Str, nPort);
Str = "SESSION BEGIN AB5643F8865CD0\n";
pSocket->Send(Str.GetBuffer(Str.GetLength()), Str.GetLength(), 0);
Str = "GET STATE AB5643F8865CD0\n";
pSocket->Send(Str.GetBuffer(Str.GetLength()), Str.GetLength(), 0);
pSocket->Close();
delete pSocket;
pSocket = NULL;
Вроде всё по учебнику, а не работает.