URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 3815
[ Назад ]

Исходное сообщение
"проблемы с libsock"

Отправлено maverick , 12-Янв-05 21:15 
такая проблема. я пишу почтовую программу, и мне надо сначала послать 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*/


Содержание

Сообщения в этом обсуждении
"проблемы с libsock"
Отправлено gyn61 , 12-Янв-05 21:21 
>  memcpy(ptr, "USER SOMEUSER", 15);

А перевод строки?

>  stat = send(sock, ptr, strlen(ptr), 0);


"проблемы с libsock"
Отправлено ssa , 13-Янв-05 03:36 
яб добавил бы еще такое:

FD_SET
select
FD_ISSET

ну или... ненаю... мне еще обычно таймаут волнует


"проблемы с libsock"
Отправлено maverick , 13-Янв-05 18:51 
>>  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"... вощем, дело ясное, что тут что-то с лайн-терминаторами.. будем копать...


"проблемы с libsock"
Отправлено ssa , 13-Янв-05 03:41 
и еще вопросик, а как strlen посчитает то длинну если нету '\0' ???

или я чего не так понял?? он вроде считает пока не попадЁт на '\0' ???

яб попробовал:

memcpy(ptr, "USER SOMEUSER\0".....


"проблемы с libsock"
Отправлено gyn61 , 13-Янв-05 19:01 
>и еще вопросик, а как strlen посчитает то длинну если нету '\0'
>???
>
>или я чего не так понял?? он вроде считает пока не попадЁт
>на '\0' ???
>
>яб попробовал:
>
>memcpy(ptr, "USER SOMEUSER\0".....

А не проще пересесть на strcpy()?