Я пытаюсь запустить программу как сервер с 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;
}