Сокат отправляет ответ в конце, а не в правильном порядке - PullRequest
0 голосов
/ 24 мая 2018

Я пытаюсь запустить программу как сервер с socat. Это очень простая программа, но я не получаю данные в правильном порядке.Я получаю ответ от сервера только тогда, когда отправляю данные и не в правильном порядке.

Программа:

#include <stdio.h>

int main(int argc, char *argv[]){
    char buff[64];
    char t[10];
    printf("Welcome\n");
    gets(t);
    printf(t);
    printf("\n");
    gets(buff);
    return 0;
}

Когда я запускаю с socat:

Сервер:

$ socat -v tcp-listen:4444,reuseaddr,fork exec:"./test"
> 2018/05/24 10:33:42.102445  length=2 from=0 to=1
a
> 2018/05/24 10:33:42.582042  length=2 from=2 to=3
a
< 2018/05/24 10:33:42.583721  length=10 from=0 to=9
Welcome
a
$ socat -v tcp-listen:4444,reuseaddr,fork exec:"./leak"
> 2018/05/24 10:39:02.551405  length=7 from=0 to=6
FOOBAR
> 2018/05/24 10:39:03.511667  length=5 from=7 to=11
LALA
< 2018/05/24 10:39:03.512021  length=15 from=0 to=14
Welcome
FOOBAR

Клиент:

$ nc 192.168.2.230 4444
FOOBAR             
LALA
Welcome
FOOBAR

Очевидно, что когда я запускаю программу, она работает правильно.

$ ./test 
Welcome
FOOBAR
FOOBAR
:)

Что может происходить?я пропустил какие-либо аргументы?

РЕШЕНИЕ

Добавить setbuf(stdout, 0);до первого printf

#include <stdio.h>

int main(int argc, char *argv[]){
    setbuf(stdout, 0);
    char buff[64];
    char t[10];
    printf("Welcome\n");
    gets(t);
    printf(t);
    printf("\n");
    gets(buff);
    return 0;
}
...