такая проблема. я пишу почтовую программу, и мне надо сначала послать USER,
потом получить ответ, послать PASS и тд... проблема в том, что у меня не получается попеременно использовать send и recv... после send никакой ошибки не наблюдается, но вот recv ждёт непонятно чего. по идее сервер должен отвечать на запрос... 100% что сервер в порядке, я его проверял netcat`ом...Может, я что то не так делаю....
Вот код... (часть его)char *ptr;
ptr = (char *) calloc(MAX_LEN, 1);
/* memset(ptr, 0x0, 100); */
memcpy(ptr, "USER SOMEUSER", 15);stat = send(sock, ptr, strlen(ptr), 0);
memset(ptr, 0x0, LEN);
stat = recv(sock, ptr, MAX_LEN, 0); /*<-- здесь он затыкается или идёт дальше
елсли использовать MSG_DONTWAIT*/
> memcpy(ptr, "USER SOMEUSER", 15);А перевод строки?
> stat = send(sock, ptr, strlen(ptr), 0);
яб добавил бы еще такое:FD_SET
select
FD_ISSETну или... ненаю... мне еще обычно таймаут волнует
>> memcpy(ptr, "USER SOMEUSER", 15);
>
>А перевод строки?
>
>> stat = send(sock, ptr, strlen(ptr), 0);Дык по логике send сама должна подставлять crlf или я ошибаюсь?
если я пишу
memcpy(ptr, "USER SOMEUSER\r\n", 15);
то при последующем обращении к recv ответ приходит, но зато
при повторении send с командой PASS и затем recv, ответ приходит invalid command, что является следствием посылки на сервер пустой строки, те "\r\n"... вощем, дело ясное, что тут что-то с лайн-терминаторами.. будем копать...
и еще вопросик, а как strlen посчитает то длинну если нету '\0' ???или я чего не так понял?? он вроде считает пока не попадЁт на '\0' ???
яб попробовал:
memcpy(ptr, "USER SOMEUSER\0".....
>и еще вопросик, а как strlen посчитает то длинну если нету '\0'
>???
>
>или я чего не так понял?? он вроде считает пока не попадЁт
>на '\0' ???
>
>яб попробовал:
>
>memcpy(ptr, "USER SOMEUSER\0".....А не проще пересесть на strcpy()?